通过匹配输入文件和访问文件中的属性值,写入通过document()访问的xml文件中的值
我是XSLT的新手,我正在尝试完成以下工作: 输入文件如下所示:通过匹配输入文件和访问文件中的属性值,写入通过document()访问的xml文件中的值,xml,xslt,xpath,Xml,Xslt,Xpath,我是XSLT的新手,我正在尝试完成以下工作: 输入文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <root> <para> Some text <frag id="1"/> Some text <frag id="2"/> Some text <frag id="3"/> </para> </roo
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
Some text
<frag id="1"/>
Some text
<frag id="2"/>
Some text
<frag id="3"/>
</para>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<frag id="1">X</frag>
<frag id="2">Y</frag>
<frag id="3">Z</frag>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
Some text
X
Some text
Y
Some text
Z
</para>
</root>
一些文本
一些文本
一些文本
元素应替换为另一个文件中相应元素的值,该文件可使用样式表中的document()函数访问
通过document()访问的文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
Some text
<frag id="1"/>
Some text
<frag id="2"/>
Some text
<frag id="3"/>
</para>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<frag id="1">X</frag>
<frag id="2">Y</frag>
<frag id="3">Z</frag>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
Some text
X
Some text
Y
Some text
Z
</para>
</root>
X
Y
Z
结果应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
Some text
<frag id="1"/>
Some text
<frag id="2"/>
Some text
<frag id="3"/>
</para>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<frag id="1">X</frag>
<frag id="2">Y</frag>
<frag id="3">Z</frag>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
<para>
Some text
X
Some text
Y
Some text
Z
</para>
</root>
一些文本
X
一些文本
Y
一些文本
Z
我尝试了许多xpath表达式的变体、循环组合和if语句等。
下面的XSL就是其中一个变体,它产生了最接近预期结果的输出
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:template match="frag">
<xsl:for-each select="document('frag.xml')/root/frag/@id = frag/@id">
<xsl:value-of select="document('frag.xml')/root/frag"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
此XSLT在输入文件中的每个
处写入frag.xml的所有元素值。
我的问题是,在测试相等的属性值之后,我不知道如何选择相应的元素值。
我希望有人能帮助我 我无法让它完美工作-现在没有XML编辑器,也没有像
document()
这样的在线编辑器调用,但这正是您需要的东西
第一个模板是,当您希望“保留大部分输入文件,但只更改一些小部分”时,它始终是一个手动基本情况
第二个转换匹配输入文档上的frag
节点,然后用frag.xml
文件中的相应节点替换它们
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="frag">
<xsl:variable name='id' select="@id"/>
<xsl:value-of select="document('frag.xml')//frag[@id=$id]"/>
</xsl:template>
</xsl:stylesheet>
这项功能非常有效!最好的是我学到了一些新的东西。身份转换。非常感谢你。