我想过滤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>
答案 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