Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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_Xslt 1.0 - Fatal编程技术网

使用XML输出作为模板的输入

使用XML输出作为模板的输入,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我试图为XML的所有元素创建键值对。 例如: 1. 2. 将返回: <KEY_VALUE_PAIR> <KEY>a/b</KEY> <VALUE>1</VALUE> </KEY_VALUE_PAIR> <KEY_VALUE_PAIR> <KEY>a/c</KEY> <VALUE>2</VALUE> </KEY_VALUE_PAIR&

我试图为XML的所有元素创建键值对。 例如:


1.
2.
将返回:

<KEY_VALUE_PAIR>
   <KEY>a/b</KEY>
   <VALUE>1</VALUE>
</KEY_VALUE_PAIR>
<KEY_VALUE_PAIR>
   <KEY>a/c</KEY>
   <VALUE>2</VALUE>
</KEY_VALUE_PAIR>

a/b
1.
空调
2.
但是,我的问题是,我希望将输入xml作为字符串

因此,与其将其作为输入:

<a>
   <b>1</b>
   <c>2</c>
</a>

1.
2.
我想用这个:

<XML>
   <content>&lt;a&gt;&lt;b&gt;xyz&lt;/a&gt;&lt;/b&gt;</content>
</XML>
<xsl:value-of select="/XML/content" disable-output-escaping="yes"/>
<xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 

abxyz/a/b
这是我的代码: 它几乎可以工作,键值对的创建是可以的,但它将创建输入XML的键值对,而不是在XML/内容中使用XML

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

 <xsl:template match="/XML/content">
  <xsl:value-of select="/XML/content" disable-output-escaping="yes"/>
  <xsl:call-template name="CreateNotificationValues"/>
  <xsl:call-template name="CreateNotificationClear"/>
 </xsl:template>

 <xsl:template match="/" name="CreateNotificationValues">
    <xsl:for-each select="//*[count(child::*) = 0]">
     <KEY_VALUE_PAIR>
      <KEY>
       <xsl:for-each select="ancestor::*"><xsl:value-of select="name()"/>/</xsl:for-each>
       <xsl:value-of select="name()"/>
      </KEY>
      <VALUE>
       <xsl:value-of select="text()"/>
      </VALUE>
     </KEY_VALUE_PAIR>
    </xsl:for-each>
 </xsl:template>

 <xsl:template match="/KEY_VALUE_PAIR" name="CreateNotificationClear">
 </xsl:template>

/
我如何使用这个:

<XML>
   <content>&lt;a&gt;&lt;b&gt;xyz&lt;/a&gt;&lt;/b&gt;</content>
</XML>
<xsl:value-of select="/XML/content" disable-output-escaping="yes"/>
<xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 

作为另一个模板的输入xml

我如何使用这个:

<XML>
   <content>&lt;a&gt;&lt;b&gt;xyz&lt;/a&gt;&lt;/b&gt;</content>
</XML>
<xsl:value-of select="/XML/content" disable-output-escaping="yes"/>
<xsl:value-of select="/XML/content" disable-output-escaping="yes"/> 

作为另一个模板的输入xml

您不能——可以对格式良好的XML文档执行XSLT转换,但上述XSLT指令的结果只是一个文本节点(其最终表示形式可能类似于XML,但这是一个一维字符串,而不是节点树)

为了将字符串用作树(已解析的XML文档),您需要解析该字符串,而执行此操作的工具称为XML解析器

XSLT 1.0或XSLT 2.0转换都不能获取字符串并将其解析为XML文档树

在XSLT3.0中,可能有一个标准函数,它正是这样做的

在XSLT 1.0或XSLT 2.0中,需要调用一个扩展函数,该函数用您喜爱的PL编写,将字符串解析为XmlDocument对象,并将该对象返回到转换