xml - XSLT - 标签不匹配

标签 xml xslt if-statement

我正在尝试将 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/

相关文章:

php - Android 手机应用程序的数据复制

xml - 使用 XSLT 检索 XML 文件名

c# - For 循环和 If 语句

c# - 即使文件存在于我的路径中,File.Exist 条件在 asp.net 中不起作用

javascript - 如何检查 3 个变量中的每一个是否都是空字符串?

c - 在C中使用xml

xml - Magento 2 : ifconfig in xml for module enable/disable

java - 使用 hibernate 连接数据库时出错

xslt - 寻找(伪)XSLT 预处理器/模板器以使其不那么冗长

xslt - 如何在 XSLT 中遍历 XML 参数