我想从xml文档中选择属性并将它们放入另一个xml文档中。特别是,当第一个文档中的内容等于第二个文档中的内容时,我想将@ana和@lem从第二个文件复制到第一个文档。
doc1.xml看起来像:
<app xml:id="app11">
<rdg wit="W5 W2 W1 W6 W4 W3"></rdg>
<rdg wit="W10"><w>s'en</w></rdg>
<rdg wit="W11"><w>s'en</w></rdg>
<rdg wit="W8 W7"><w>vait</w> <w>entre</w> <w>lui</w></rdg>
<rdg wit="W9"><w>va</w></rdg>
</app>
<app xml:id="app12">
<rdg wit="W5 W2 W1 W6 W9 W4 W8 W3 W7"><w>et</w> <w>sa</w></rdg>
<rdg wit="W10 W11"><w>aloient</w></rdg>
</app>
<app xml:id="app13">
<rdg wit="W2 W1 W3"><w>conpaignie</w> <w>tot</w></rdg>
<rdg wit="W10 W11"></rdg>
<rdg wit="W5 W6 W9 W4"><w>compaignie</w></rdg>
<rdg wit="W8 W7"><w>compaigne</w></rdg>
</app>
doc2.xml如下所示:
<w ana="VER" lem="s'en">s'en</w>
<w ana="PRE" lem="entre">entre</w>
<w ana="PRO:pers" lem="il">lui</w>
<w ana="CON:coord" lem="et">et</w>
<w ana="DET:poss" lem="son">sa</w>
<w ana="NOM" lem="compagnie">compaigne</w>
<w ana="PRO:ind" lem="tot">tout</w>
<w ana="ADJ" lem="droit">droit</w>
<w ana="PRE" lem="apres">apres</w>
<w ana="VER" lem="aler">aloient</w>
<w ana="PRO:ind" lem="tot">tout</w>
<w ana="ADJ" lem="droit">droit</w>
<w ana="VER" lem="aler">vait</w>
<w ana="VER" lem="defendre">deffendre</w>
<w ana="PRE" lem="contre">contre</w>
<w ana="DET:def" lem="le">le</w>
我已尝试使用此XSLT,但它不起作用
<?xml version="1.0" encoding="UTF-8"?>
<xsl:template match="@* | node()">
<xsl:copy-of select="."/>
</xsl:template>
<xsl:template match="//w">
<xsl:if test=".[text()]=document(doc2.xml)//w[text()]">
<xsl:copy>
<xsl:attribute name="ana">
<xsl:value-of
select="document(doc2.xml)//w/@ana"/>
</xsl:attribute>
</xsl:copy>
</xsl:if>
<xsl:apply-templates/>
</xsl:template>
<!--
<xsl:copy-of select="document(doc2.xml)//w[@ana] and document(doc2.xml)//w[@lem]"></xsl:copy-of>
-->
有什么建议吗?
谢谢!
答案 0 :(得分:0)
使用这样的样式表(XSLT 1.0),它可能会更好用:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="*|@*"></xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:variable name="ws" select="document('doc2.xml')" />
<xsl:template match="w">
<xsl:copy>
<xsl:if test="$ws//w[text() = current()]">
<xsl:copy-of select="$ws//w[text() = current()]/@ana" />
</xsl:if>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
生成的XML将是:
<app xml:id="app11">
<rdg wit="W5 W2 W1 W6 W4 W3"/>
<rdg wit="W10">
<w ana="VER">s'en</w>
</rdg>
<rdg wit="W11">
<w ana="VER">s'en</w>
</rdg>
<rdg wit="W8 W7">
<w ana="VER">vait</w>
<w ana="PRE">entre</w>
<w ana="PRO:pers">lui</w>
</rdg>
<rdg wit="W9">
<w>va</w>
</rdg>
</app>
<app xml:id="app12">
<rdg wit="W5 W2 W1 W6 W9 W4 W8 W3 W7">
<w ana="CON:coord">et</w>
<w ana="DET:poss">sa</w>
</rdg>
<rdg wit="W10 W11">
<w ana="VER">aloient</w>
</rdg>
</app>
<app xml:id="app13">
<rdg wit="W2 W1 W3">
<w>conpaignie</w>
<w>tot</w>
</rdg>
<rdg wit="W10 W11"/>
<rdg wit="W5 W6 W9 W4">
<w>compaignie</w>
</rdg>
<rdg wit="W8 W7">
<w ana="NOM">compaigne</w>
</rdg>
</app>