Использование XSLT для разделения файла XML, но не может получить значение кросс-тега - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть файл XML, как показано ниже

<Season>
<Activitys>
    <Activity>
        <No>A001</No>
        <Date>2020/1/1</Date>
    </Activity>
    <Activity>
        <No>A002</No>
        <Date>2020/2/1</Date>
    </Activity>
</Activitys>

<Staffs>
    <Staff>
        <Name>Tom</Name>
        <AssignedActivity>A001</AssignedActivity>
    </Staff>
    <Staff>
        <Name>Jason</Name>
        <AssignedActivity>A002</AssignedActivity>       
    </Staff>  
</Staffs>  

<Notice>description</Notice></Season>

, и я хочу преобразовать его в 2 XML файлы действий, каждый из которых будет отображать соответствующую активность <No>, <AssignedStaff> и <Notice> информация.

<Activity>
<No>A001</No>
<Date>2020/1/1</Date>
<AssignedStaff>Tom</AssignedStaff>
<Notice>description</Notice></Activity>

Теперь я использую ниже XSLT, который может генерировать до 2 файлов и получать информацию об активности. Но не знаю, как получить назначенный персонал и заметить значение тега. Я пытался использовать apply-template, но до сих пор не могу получить путь. Может ли кто-нибудь предоставить какие-либо идеи? Большое спасибо.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes" name="xml"/>
<xsl:template match="/">
    <xsl:for-each select="Season/Activitys/Activity">
        <xsl:variable name="filename" select="concat('output1/',No,'.xml')" />
        <xsl:value-of select="$filename" />         
        <xsl:result-document href="{$filename}" format="xml"> 
            <Activity>
                <No>
                    <xsl:value-of select="No"/>
                </No>
                <Date>
                    <xsl:value-of select="Date"/>
                </Date>
            </Activity>
        </xsl:result-document>
    </xsl:for-each> 
</xsl:template>

1 Ответ

0 голосов
/ 15 февраля 2020

Ну, для Уведомления вы просто хотите <xsl:copy-of select="ancestor::Season/Description"/>.

Для справочного значения объявите ключ <xsl:key name="staff-act" match="Staff" use="AssignedActivity"/> и используйте его внутри вашего for-each с

<AssignedStaff><xsl:value-of select="key('staff-act', No)/Name"/></AssignedStaff>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...