作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于此 XML
<Xml>
<Thing id="1" >
<Foo id="11" parentId="12"/>
<Foo id="12"/>
</Thing>
<Thing id="2" parentId="1" />
<Thing id="3" parentId="2" />
<Thing id="4">
<Foo id="11" parentId="15"/>
<Foo id="12" parentId="14"/>
<Foo id="13" parentId="11"/>
<Foo id="14" parentId="15"/>
<Foo id="15"/>
</Thing>
</Xml>
<Xml>
<Thing id="1" >
<Foo id="12">
<Foo id="11" parentId="12"/>
</Foo>
<Thing id="2" parentId="1" >
<Thing id="3" parentId="2" />
</Thing>
</Thing>
<Thing id="4" >
<Foo id="14" parentId="12">
<Foo id="12" parentId="14"/>
</Foo>
<Foo id="15">
<Foo id="11" parentId="15">
<Foo id="13" parentId="11"/>
</Foo>
</Foo>
</Thing>
</Xml>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<!-- override identity rule with template to match on
a node who has siblings, where sibling/@parentId == ./@id
-->
<xsl:template match="node()[@id='1' and (preceding-sibling::*[@parentId = 1] or following-sibling::*[@parentId = 1])]">
<captured>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</captured>
</xsl:template>
<!-- identity rule -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
最佳答案
首先,请注意提供的 XML 文档 中的错误。 :
<Foo id="12" parentId="14"/>
<Foo id="13" parentId="11"/>
<Foo id="14" parentId="12"/>
Foo
之间存在循环关系与
id
12 和
Foo
与
14
.这构成了一个循环,而不是“层次结构”。还有,这两个
Foo
从层次结构的顶部无法访问元素!
请更正 .
<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:key name="kElemById" match="*"
use="concat(generate-id(..), '+', @id)"/>
<xsl:key match="*" name="kDescendants"
use="concat(generate-id(key('kElemById',
concat(generate-id(..), '+',@parentId))),
'+', @parentId)"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<Xml>
<xsl:apply-templates select="*[not(@parentId)]"/>
</Xml>
</xsl:template>
<xsl:template match="*/*">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*[not(@parentId)]"/>
<xsl:apply-templates select=
"key('kDescendants', concat(generate-id(), '+', @id))"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<Xml>
<Thing id="1" >
<Foo id="11" parentId="12"/>
<Foo id="12"/>
</Thing>
<Thing id="2" parentId="1" />
<Thing id="3" parentId="2" />
<Thing id="4">
<Foo id="11" parentId="15"/>
<Foo id="12" parentId="14"/>
<Foo id="13" parentId="11"/>
<Foo id="14" parentId="12"/>
<Foo id="15"/>
</Thing>
</Xml>
<Xml>
<Thing id="1">
<Foo id="12">
<Foo id="11" parentId="12"/>
</Foo>
<Thing id="2" parentId="1">
<Thing id="3" parentId="2"/>
</Thing>
</Thing>
<Thing id="4">
<Foo id="15">
<Foo id="11" parentId="15">
<Foo id="13" parentId="11"/>
</Foo>
</Foo>
</Thing>
</Xml>
关于xslt - 如何使用 XSLT 组装 XML 层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762376/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!