使用XSLT从XML的特定节点中删除换行符

时间:2017-02-08 19:29:28

标签: xml xslt

我有一个节点:

<item>
<name>abcd</name>
<type>pqrs</type>
</item>

我需要将它提取到一个新元素,如下所示:

<newitem>
    <item>abcd</item>
    <completeXML>
          <item><name>abcd</name><type>pqrs</type></item>
    <completeXML>
</newitem>

completeXML元素需要包含整个源XML,但不包含换行符。谢谢你的任何指示。

1 个答案:

答案 0 :(得分:1)

不确定它有什么不同,但给出了以下输入:

<强> XML

<root>
   <color>
      <name>red</name>
      <type>primary</type>
   </color>
   <item>
      <name>abcd</name>
      <type>pqrs</type>
   </item>
   <shape>
      <name>circle</name>
      <type>2D</type>
   </shape>
</root>

以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:strip-space elements="item"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

将返回:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <color>
      <name>red</name>
      <type>primary</type>
   </color>
   <item><name>abcd</name><type>pqrs</type></item>
   <shape>
      <name>circle</name>
      <type>2D</type>
   </shape>
</root>

加了:

WRT您编辑的问题,请尝试添加以下模板:

<xsl:template match="/">
    <newitem>
        <xsl:text>&#10;&#9;</xsl:text>
        <item>abcd</item>
        <xsl:text>&#10;&#9;</xsl:text>
        <completeXML>
            <xsl:text>&#10;&#9;&#9;</xsl:text>
            <xsl:apply-templates/>
            <xsl:text>&#10;&#9;</xsl:text>
        </completeXML>
        <xsl:text>&#10;</xsl:text>
    </newitem>
</xsl:template>

演示http://xsltransform.net/jz1PuPR

请注意,对于XML的某些部分需要不同的缩进是非常不寻常的,因此需要大量工作。而且我完全不相信它是值得的。