作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个如下所示的 XML 文件:
<a>
......
<b>
<c>
<c1>some text</c1>
</c>
<d>
<d1>some more text</d1>
<d1>even more text</d1>
</d>
<e>
<e1>some more text</e1>
<e1>even more text</e1>
</e>
</b>
</a>
我想包装元素 <d>
和 <e>
进入 <wrapper>
元素,所以我可以有类似下面的东西:
<a>
......
<b>
<c>
<c1>some text</c1>
</c>
<wrapper>
<d>
<d1>some more text</d1>
<d1>even more text</d1>
</d>
<e>
<e1>some more text</e1>
<e1>even more text</e1>
<e2>even more</e2>
</e>
</wrapper>
</b>
......
</a>
我面临的一个问题(除了我是 XSLT 的新手之外)是 <d>
和 <e>
是可选的。
我该怎么做?
最佳答案
这个转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="b/*[self::d or self::e][1]">
<wrapper>
<xsl:apply-templates mode="copy" select=
". | following-sibling::*[self::d or self::e]"/>
</wrapper>
</xsl:template>
<xsl:template match="*" mode="copy">
<xsl:copy>
<xsl:apply-templates mode="copy" select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="b/*[self::d or self::e][position()>1]"/>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<a> ......
<b>
<c>
<c1>some text</c1>
</c>
<d>
<d1>some more text</d1>
<d1>even more text</d1>
</d>
<e>
<e1>some more text</e1>
<e1>even more text</e1>
</e>
</b>
</a>
产生想要的结果:
<a> ......
<b>
<c>
<c1>some text</c1>
</c>
<wrapper>
<d>
<d1>some more text</d1>
<d1>even more text</d1>
</d>
<e>
<e1>some more text</e1>
<e1>even more text</e1>
</e>
</wrapper>
</b>
</a>
注意:重写身份规则 + 模式。
关于xml - 使用 XSLT 将多个可选的 XML 元素包装到一个新的包装器 XML 元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4925178/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!