我想改变这个
<appSettings>
<!-- comment1 -->
<add key="Value1" value="11" />
<!-- comment2 -->
<add key="Value2" value="22" />
</appSettings>
使用xslt
<appSettings>
<!-- comment1 -->
<add key="Value1" value="11" />
<add key="Value2" value="22" />
</appSettings>
这是我试过的xslt
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()[contains(., 'comment2')]" />
</xsl:stylesheet>
但后来我
<appSettings>
<!-- comment1 -->
<add key="Value1" value="11" />
\r\n__ <- NewLine and Spaces I want to avoid
<add key="Value2" value="22" />
</appSettings>
如何完全删除包含评论节点的行?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您真的想这样做,可以尝试从indent="yes"
中删除xml:output
选项,然后使用模板来匹配并忽略任何紧接在注释之前的仅空白节点。 / p>
试试这个XSLT
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="no" omit-xml-declaration="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()[contains(., 'comment2')]" />
<xsl:template match="text()[not(normalize-space())]
[preceding-sibling::node()[1][self::comment()[contains(., 'comment2')]]]" />
</xsl:stylesheet>
进行测试