我对这个问题进行了编辑以使其清楚。我想获取所有的节节点,包括它们的节节点和标题节点,保持嵌套级别。下面是我想要的输出结果:
<?xml version="1.0" encoding="UTF-8"?>
<results>
<section id="intro" difficulty="easy">
<title>Introduction</title>
<section>
<title>Web Data and the Two Cultures</title>
</section>
</section>
<section id="syntax" difficulty="medium">
<title>A Syntax For Data</title>
<section>
<title>Base Types</title>
</section>
<section>
<title>Representing Relational Databases</title>
</section>
<section>
<title>Representing Object Databases</title>
</section>
</section>
</results>
xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="book.xsl"?>
<book>
<title>Data on the Web</title>
<author>Serge Abiteboul</author>
<author>Peter Buneman</author>
<author>Dan Suciu</author>
<section id="intro" difficulty="easy">
<title>Introduction</title>
<p>Text ... </p>
<section>
<title>Web Data and the Two Cultures</title>
<p>Text ... </p>
<figure height="400" width="400">
<title>Traditional client/server architecture</title>
<image source="csarch.gif"/>
</figure>
<p>Text ... </p>
</section>
</section>
<section id="syntax" difficulty="medium">
<title>A Syntax For Data</title>
<p>Text ... </p>
<figure height="200" width="500">
<title>Graph representations of structures</title>
<image source="graphs.gif"/>
</figure>
<p>Text ... </p>
<section>
<title>Base Types</title>
<p>Text ... </p>
</section>
<section>
<title>Representing Relational Databases</title>
<p>Text ... </p>
<figure height="250" width="400">
<title>Examples of Relations</title>
<image source="relations.gif"/>
</figure>
</section>
<section>
<title>Representing Object Databases</title>
<p>Text ... </p>
</section>
</section>
</book>
以下是我的解决方案,这是错误的:
<?xml version="1.0" encoding="UTF-8"?>
<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="/book">
<xsl:apply-templates select="section"/>
</xsl:template>
<xsl:template match="section">
<xsl:element name="section">
<xsl:for-each select="@*">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:for-each>
</xsl:element>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="section"/>
</xsl:template>
<xsl:template match="title">
<xsl:element name="title">
<xsl:for-each select="@*">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:for-each>
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我曾想过使用递归,但我没有发现如何在XSLT中做到这一点。应该还有其他方法。提前感谢!
如果您确实想做的只是将book
元素重命名为结果
,您需要从XSLT标识模板开始
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
就其本身而言,它按原样复制源文档中的所有节点,这意味着您只需要为您希望更改的节点编写一个模板。在这种情况下,您正在更改book
元素,因此您将拥有一个特定的模板,如下所示:
<xsl:template match="book">
<results>
<xsl:apply-templates select="@*|node()"/>
</results>
</xsl:template>
此外,如果您想删除除章节和标题(以及书籍)之外的元素,一种方法是使用模板匹配“其他”元素,然后忽略它们
<xsl:template match="*[not(self::book) and not(self::section) and not(self::title)]" />
就这样!试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="book">
<results>
<xsl:apply-templates select="@*|node()"/>
</results>
</xsl:template>
<xsl:template match="*[not(self::book) and not(self::section) and not(self::title)]" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但是请记住,如果您使用的是<代码>
我正在尝试映射我的遗留API对象(我无法更改它),该对象具有嵌套的原始类型属性。列表的元素与DTO列表的元素不兼容,应显式映射为嵌套。不幸的是,MapStruct似乎认为原始与所有类型化列表兼容,并忽略了我试图指定的任何映射,而生成的代码不能正常工作,随后在序列化程序的某个地方产生错误。 我的API对象具有嵌套的原始类型列表: 我的DTO对象具有DTO值类型元素的泛型类型列表: ...但MapSt
问题内容: 如果嵌套太深,看起来Powershell在导出为JSON时会切断数据。我的对象层次结构如下所示: 由于某种原因,当我转换为JSON时,powershell会将第三级(这些源使用的数据的集合)导出为空字符串,即使它是添加了各种NoteProperty的对象数组。例如: 这将导致以下JSON字符串: 转换为XML会导致类似情况: 在Powershell中是否存在某种对象嵌套限制? 问题答案
如果简化,将得到以下JSON实现: 数据(实体)- 我假设我将首先解密数据对象,从中获取一个类型,然后从该类型使用字符串“Data”中的必要类型进行解密,但我的想法失败了。有没有办法解决这个问题? 我创造了这种类型的正常实体 在“数据”字段中,我放置一个对象,该对象也由 当试图用 我犯了个错误 com.fasterxml.jackson.databind.exc.不匹配的输入异常:无法构造实例(尽
我想从XML结构中使用单个节点创建嵌套的XML节点,我尝试过但无法带来嵌套的XML结构,请一些人帮助我,我无法获得预期的行为。 XML结构: XSL使用: 收到的输出: 预期产出 “人员非活动”元素应用于匹配
我想使用XSLT展平XML文件。示例(可以有任意数量的和节点): 输入: 期望输出: 如何仅展平那些将属性设置为的标记?
使用Laravel 5.6,我试图从MySQL类别表中显示子类别的子类别。我想传递这个名字,并获得它的所有子类,而不管父类是什么。 类别表 期望结果 return App\Category::where('name','Child-1-P-2'))-