Xslt xml的空节点
输入XMLXslt xml的空节点,xslt,Xslt,输入XML <root><table> <cell1>4324</cell1> <cell2>543</cell2> </table> <table1> <cell1>4324</cell1> <cell2>543</cell2> </table1></root> 4324 543 4324 543 我试图复制我的x
<root><table>
<cell1>4324</cell1>
<cell2>543</cell2>
</table>
<table1>
<cell1>4324</cell1>
<cell2>543</cell2>
</table1></root>
4324
543
4324
543
我试图复制我的xml节点表,所以所有内容都保持不变,只有值应该被删除。我需要将xslt2的输出
<root><table>
<cell1></cell1>
<cell2></cell2>
</table>
<table1>
<cell1>4324</cell1>
<cell2>543</cell2>
</table1></root>
4324
543
请注意,上面的示例只是显示我正在尝试做的事情——基本上清空所有表节点值。我知道如何使用text()删除/复制特定于示例的节点cell1,但不知道如何像示例中所示清空整个节点
任何帮助都将不胜感激:D
谢谢,
Eoglasi使用身份转换模板复制所有内容;使用其他模板抑制不需要的text()节点:
<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="yes"/>
<!-- identity transformation -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="table/*/text()"/>
</xsl:stylesheet>
应用于您的修改输入:
<root>
<table>
<cell1>4324</cell1>
<cell2>543</cell2>
</table>
<table1>
<cell1>4324</cell1>
<cell2>543</cell2>
</table1>
</root>
4324
543
4324
543
结果是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<table>
<cell1/>
<cell2/>
</table>
<table1>
<cell1>4324</cell1>
<cell2>543</cell2>
</table1>
</root>
4324
543
不要养成在Stackoverflow上问琐碎问题的习惯。您的任何努力都将不胜感激。如果XSLT对您如此重要,我建议您自己花几分钟研究一下基础知识。基本上,我尝试过,但没有成功——这就是为什么我要问这个问题。这个问题对您来说可能微不足道,但请确保如果我知道答案,我不会问它。我已更正了上面的初始问题供您参考。您不知道答案,因为您从未真正尝试过理解XSLT,如果我可以这样说的话。若你们“基本上尝试过”,那个么你们已经被告知过很多次,你们应该发布这个尝试过的代码。正如我写的那个样,我尝试过的方法对我来说不起作用,因为解析器返回了错误。基本上,我现在明白了您对尝试的代码的意思——在不久的将来,当在堆栈溢出中询问问题时,我将严格地这样做。这可能会起作用,但我看到我没有提到我针对的是特定的节点。在我的示例表中。我尝试了match=“table/text()”但没有成功?知道如何使其工作吗?很酷,我只缺少了/*/:D这会删除文本,如果它们是例如cell1中的另一个节点,并且我想完全删除它,我将如何处理?现在,我要清空的节点cell1中的节点未被触及?@eoglasi为您要从输出中排除的每个节点(或节点类型)编写一个空模板。可以使用上述代码完成吗,因为我确实要为每个节点编写空模板-我有大约500个不同的:D?抱歉,我没有遵循。如果您有某种逻辑来确定要排除(或保留)哪些节点,那么它(可能)可以在XSLT中实现。如果您只有一个列表,那么您需要列出它们。我建议你修改你的问题,把这一点弄清楚。