我认为主要的问题是如何编写exeption表达式来去除输出结果中的“S-3”和“Z”属性。但是怎么做呢?
源代码
<root>
<B att-1="some value" att-2="value"> text 1
<S-1>text 2</S-1>
<S-2>text 3</S-2>
<S-3 trash-att="value"> trash-text a </S-3>
<Z z-att="value"> z-text 1 </Z>
</B>
<B att-1="some value" att-2="value"> text 4
<S-1> text 5</S-1>
<S-2> text 6</S-2>
<S-3 trash-att="value"> trash-text b </S-3>
<Z z-att="value"> z-text 2 </Z>
</B>
<B att-1="some value" att-2="value"> text 7
<S-1> text 8</S-1>
<S-2> text 9</S-2>
<S-3 trash-att="value"> trash-text c </S-3>
<Z z-att="value"> z-text 3 </Z>
</B>
</root>
期望输出
<root>
<B att-1="some value"
att-2="value"
S-1="text 2"
S-2="text 3">
<Z attr=" z-text 1 "/>
</B>
<B att-1="some value"
att-2="value"
S-1=" text 5"
S-2=" text 6">
<Z attr=" z-text 2 "/>
</B>
<B att-1="some value"
att-2="value"
S-1=" text 8"
S-2=" text 9">
<Z attr=" z-text 3 "/>
</B>
</root>
我的xslt代码(S-3和Z属性仍然存在,但不应该)https://xsltfiddle.liberty-development.net/3NSTbfj/1
<?xml version="1.0" encoding="utf-8"?>
<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"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- 1 - MAIN transform with element B -->
<xsl:template match="B">
<B>
<xsl:copy-of select="@*"/>
<xsl:for-each select="*" >
<xsl:attribute name="{name()}">
<xsl:value-of select="text()"/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates select="@*|node()"/>
</B>
</xsl:template>
<!-- 2 - keep additional Z node -->
<xsl:template match="Z">
<Z >
<xsl:attribute name="attr">
<xsl:value-of select="."/>
</xsl:attribute>
</Z>
</xsl:template>
<!-- 3 - delete nodes -->
<xsl:template match="S-1">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="S-2">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="S-3">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
我会感激任何解决办法
您可以尝试此方法并将其用于每个
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="B"/>
</xsl:copy>
</xsl:template>
<xsl:template match="B">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each select="*[not(@*)]">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates select="Z"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Z">
<xsl:copy>
<xsl:attribute name="attr">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
演示:https://xsltfiddle.liberty-development.net/3NSTbfj/2
我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。
我需要将子元素复制到父元素中。 输入 期望输出 我尝试的内容(输出与输入保持相同): 我肯定会错过一些非常简单的事情。子元素与父元素具有相同的名称,这应该不是问题?
我正在创建一个使用 RestAPI 获取数据的应用程序,对于该操作,我使用改造 2、okhttp3 和 Jackson 将 json 解析为对象,我的应用程序还使用 Firebase 云消息传递 当我编译我的代码时,它会给我以下错误 错误:任务执行失败:app:transformresourceswithmergejavarefordebug。 com . Android . build . AP
我想从父节点复制到子节点。我真的不确定这是如何实现的。 我的源xml 我想得到输出为 我想要XSLT1.0中的解决方案。 我想将这些节点复制到子节点 谢谢。
问题内容: 阅读以下文章,我设法将图例放在情节之外。 如何将图例排除在情节之外 码: 显示正确的绘图,并在其外部带有图例。但是,当我使用将文件另存为文件时,图例将被截断。 一些谷歌搜索显示了变通方法,例如add或to ,但都没有用。 正确的方法是什么?Matplotlib版本是0.99.3。 谢谢。 问题答案: 问题是,当您动态绘图时,会自动确定边框以适合所有对象。保存文件时,操作不会自动完成,因
问题内容: 有没有在Python的标准方式标题字符的字符串(即词开始大写字符,所有剩余的套管字符有小写),但像离开的文章,和小写? 问题答案: 这有一些问题。如果使用拆分和合并,则某些空格字符将被忽略。内置的大写和标题方法不会忽略空格。 如果句子以文章开头,则不希望标题的第一个单词小写。 请记住以下几点: