XSLT过滤XML,除了certen元素

时间:2016-05-31 11:18:06

标签: xml xslt xslt-2.0

我想过滤XML。 我得到的相当多,有很多无用的信息给我。

我只需要一些带有此文件文本的元素。 这几乎就是它的样子。

<root>
  <customerinfo1>...</customerinfo1>
  <customerinfo2>...</customerinfo2>
  <productinfo>
    <productinfo1>...</productinfo1>
    <productinfo2...></productinfo2>
      <textarea>
        <other1>...</other1>
        <other2>...</other2>
        <text1>abc</text1>
        <text2>cab</text2>
        <text3>bca</text3>
        <other3>...</other3>
      </textarea>
  </productinfo>
</root>

这几乎就是它的样子。并非所有元素都有文字。我想在其中包含带有文本的元素,并将它们添加到一个元素中。 我想要的是类似的东西。

<placement>
<text>Text from text1 text2 or text3</text>
</placement>

我做了什么XSLT以及它做了什么。 所以我设法将它排序为文本元素,但不将它们分组到一个元素。 最大的问题是所有文本都从<text>No text here</text>消失了,我得到的结论是,从XML的开头就是空的。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="*[starts-with(name(),'text')]"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="node()|@*">
        <placement>
          <text>
            <xsl:apply-templates/>
          </text>
        </placement>
  </xsl:template>
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:0)

  

我希望textarea成为展示位置,将text1,text2,text3转换为   成为一个<text>Text from text1, 2 and 3 here </text>

怎么样:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <placement>
        <text>
            <xsl:value-of select="//textarea/*[starts-with(name(),'text')]"/>
        </text>
    </placement>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例(在更正<productinfo2..>之后),结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<placement>
   <text>abc cab bca</text>
</placement>

答案 1 :(得分:0)

谢谢。通过一点编辑,这很有用。 让Hade将select标签更改为

<other1>...</other1> <text1>abc</text1> <other2>...</other2> <text2>cab</text2> <text3>bca</text3> <other3>...</other3>

文字元素的顺序不是这样的

Location