Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt xml的空节点_Xslt - Fatal编程技术网

Xslt xml的空节点

Xslt 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

输入XML

<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中实现。如果您只有一个列表,那么您需要列出它们。我建议你修改你的问题,把这一点弄清楚。