我正在尝试将 XLST 与此 XML 结合使用:
<?xml version="1.0"?>
<ArrayOfDynamicData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DynamicData>
<item>
<name>Name</name>
<value xsi:type="xsd:int">0</value>
</item>
<item>
<name>Value</name>
<value xsi:type="xsd:long">1</value>
</item>
</DynamicData>
</ArrayOfDynamicData>
我目前拥有的 XLST 是:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xdt="http://www.w3.org/2005/xpath-datatypes"
xmlns:err="http://www.w3.org/2005/xqt-errors"
exclude-result-prefixes="xs xdt err fn">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<graph showNames='1' caption='##TITLE HERE##' decimalPrecision='0' >
<xsl:for-each select="ArrayOfDynamicData/DynamicData/item">
<xsl:if test="name='Name'">
<set>
<name><xsl:value-of select='value' /></name>
</xsl:if>
<xsl:if test="name='Value'">
<value><xsl:value-of select='value' /></value>
</set>
</xsl:if>
</xsl:for-each>
</graph>
</xsl:template>
</xsl:stylesheet>
现在在我看来这应该可行,但由于标签不匹配,我收到错误。但我需要将两个 block 中的数据放置在一个 block 中,并且我不确定如何实现这一点。
谢谢, 詹姆斯。
编辑:
我正在努力实现这一目标:
<set>
<name>0</name>
<value>2</value>
</set>
如果我输入 <set>
if 之外的标签,我得到:
<set>
<name>0</name>
</set>
<set>
<value>2</value>
</set>
最佳答案
这可以通过非常简单的方式完成:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" method="xml" indent="yes"/>
<xsl:template match="/">
<graph showNames='1' caption='##TITLE HERE##' decimalPrecision='0'>
<set>
<xsl:for-each select=
"ArrayOfDynamicData/DynamicData/item[name='Name']">
<name>
<xsl:value-of select='value' />
</name>
<value>
<xsl:value-of select=
"following-sibling::item[name = 'Value'][1]/value" />
</value>
</xsl:for-each>
</set>
</graph>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<ArrayOfDynamicData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DynamicData>
<item>
<name>Name</name>
<value xsi:type="xsd:int">0</value>
</item>
<item>
<name>Value</name>
<value xsi:type="xsd:long">1</value>
</item>
</DynamicData>
</ArrayOfDynamicData>
产生了想要的正确结果:
<graph showNames="1" caption="##TITLE HERE##" decimalPrecision="0">
<set>
<name>0</name>
<value>1</value>
</set>
</graph>
关于xml - XSLT - 标签不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909637/