Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何连接_Xml_Xslt - Fatal编程技术网

Xml 如何连接

Xml 如何连接,xml,xslt,Xml,Xslt,如何连接两个XML元素属性 我有以下输入XML: <Fields header="EXAMPLE" delim=" " xmlns:m="http://myserver"> <Field prefix="cs1" name="example" label="Test" /> <Field prefix="cs2" nam

如何连接两个XML元素属性

我有以下输入XML:

<Fields header="EXAMPLE" delim=" " xmlns:m="http://myserver">
  <Field prefix="cs1" name="example" label="Test" />
  <Field prefix="cs2" name="**toConcatenate**" label="Test 2" />
</Fields


你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:m="http://myserver"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  
  <xsl:template match="Fields">
      <xsl:copy>
          <xsl:copy-of select="@*"/>
          <Field prefix="cs3" name="{concat(Field[1]/@name,Field[2]/@name)}"/>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

看到它在这里工作:

这假定只有两个元素要连接。
在XSLT1中,如果有N个元素,则需要添加一个循环来连接所有属性。在XSLT 2中,您可以简单地执行Field/@name,它将为您提供所有属性的连接。

您到底在哪里遇到了这个问题?您总是只需要将两个元素连接在一起,还是可以是多个元素?您使用的是哪个版本的XSLT?@Sebastien我一直在测试XSLT 1和XSLT 2的选项,但运气不太好-理想情况下,由于将解析内容的应用程序,1会更好,因为它非常旧,可能没有可靠的XSLT 2实现@michael.hor257k-我能看到如何使用XSLT合并两个值,但看不到有人谈论合并两个属性-也就是说,我知道我能做到:
“我看不到设置属性值的参考?”这里有一个:。这是另一个:。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:m="http://myserver"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  
  <xsl:template match="Fields">
      <xsl:copy>
          <xsl:copy-of select="@*"/>
          <Field prefix="cs3" name="{concat(Field[1]/@name,Field[2]/@name)}"/>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>