<Records count="1">
<Metadata>
<FieldDefinitions>
<FieldDefinition id="25675" name="GrandpaID" alias="GrandpaID" />
<FieldDefinition id="123" name="Father ID" alias="FatherID" />
<FieldDefinition id="1923" name="Son ID" alias="SonID" />
</FieldDefinitions>
</Metadata>
<LevelCounts>
<LevelCount id="1" count="2" />
<LevelCount id="2" count="2" />
<LevelCount id="3" count="3" />
</LevelCounts>
<Record contentId="578859" levelId="1" moduleId="648" parentId="0">
<Record contentId="138286" levelId="2" moduleId="68" parentId="0">
<Record contentId="107826" levelId="3" moduleId="152" parentId="0">
<Field id="1923" type="1">Grandson Record 1</Field>
</Record>
<Record contentId="107830" levelId="3" moduleId="152" parentId="0">
<Field id="1923" type="1">Grandson Record 2</Field>
</Record>
<Field id="123" type="1">Son Record</Field>
</Record>
<Field id="25675" type="6">Grandpa Record</Field>
</Record>
</Records>
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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:variable name ="fields" select="//Metadata/FieldDefinitions" />
<!--match the root node-->
<xsl:template match="Records">
<ArcherRecords >
<xsl:apply-templates select="Record" />
</ArcherRecords>
</xsl:template>
<!-- match child relationships -->
<xsl:template match="Record">
<xsl:variable name="fieldName" select="translate(@levelId, ': ', '__')" />
<xsl:element name="Relationship_{$fieldName}">
<xsl:apply-templates select="@contentId" />
<xsl:apply-templates select="Field" />
<xsl:apply-templates select="Record" />
</xsl:element>
</xsl:template>
<!--get field name-->
<xsl:template name="getName">
<xsl:param name="fieldId" />
<xsl:choose>
<xsl:when test="$fields/FieldDefinition[@id=$fieldId]">
<xsl:value-of select="$fields/FieldDefinition[@id=$fieldId]/@alias"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'Field_'"/>
<xsl:value-of select="translate(@id, ': ', '__')" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<?xml version="1.0" encoding="UTF-8"?>
<ArcherRecords xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Relationship_1>
<Field_contentId>578859</Field_contentId>
<GrandpaID>Grandpa Record</GrandpaID>
<Relationship_2>
<Field_contentId>138286</Field_contentId>
<FatherID>Son Record</FatherID>
<Relationship_3>
<Field_contentId>107826</Field_contentId>
<SonID>Grandson Record 1</SonID>
</Relationship_3>
<Relationship_3>
<Field_contentId>107830</Field_contentId>
<SonID>Grandson Record 2</SonID>
</Relationship_3>
</Relationship_2>
</Relationship_1>
</ArcherRecords>
预期结果:
<?xml version="1.0" encoding="UTF-8"?>
<ArcherRecords xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Relationship_1>
<Field_contentId>578859</Field_contentId>
<GrandpaID>Grandpa Record</GrandpaID>
<Relationship_2>
<Field_contentId>138286</Field_contentId>
<FatherID>Son Record</FatherID>
<Relationship_3>
<Field_contentId>107826</Field_contentId>
<SonID>Grandson Record 1</SonID>
</Relationship_3>
</Relationship_2>
</Relationship_1>
<Relationship_1>
<Field_contentId>578859</Field_contentId>
<GrandpaID>Grandpa Record</GrandpaID>
<Relationship_2>
<Field_contentId>138286</Field_contentId>
<FatherID>Son Record</FatherID>
<Relationship_3>
<Field_contentId>107830</Field_contentId>
<SonID>Grandson Record 2</SonID>
</Relationship_3>
</Relationship_2>
</Relationship_1>
</ArcherRecords>
如有任何帮助,我们将不胜感激!
我可能在这里遗漏了什么,因为我看不出为什么这需要这么复杂。对于具有任意级别的输入,我相信以下样式表将返回所请求的结果:
XSLT 1.0
<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"/>
<xsl:key name="fieldDefinition" match="FieldDefinition" use="@id" />
<xsl:template match="/Records">
<ArcherRecords>
<!-- for each leaf node -->
<xsl:for-each select=".//Record[not(Record)]">
<!-- replicate the tree, starting from the top -->
<xsl:apply-templates select="ancestor::Record[last()]">
<xsl:with-param name="leafId" select="@contentId"/>
</xsl:apply-templates>
</xsl:for-each>
</ArcherRecords>
</xsl:template>
<xsl:template match="Record">
<xsl:param name="leafId"/>
<xsl:element name="Relationship_{@levelId}">
<!-- deal with the current level -->
<Field_contentId>
<xsl:value-of select="@contentId" />
</Field_contentId>
<xsl:element name="{key('fieldDefinition', Field/@id)/@alias}">
<xsl:value-of select="Field" />
</xsl:element>
<!-- continue to the next lower level, branching to current leaf node only -->
<xsl:apply-templates select="Record[descendant-or-self::Record/@contentId=$leafId]">
<xsl:with-param name="leafId" select="$leafId"/>
</xsl:apply-templates>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
注意,我们假设每个记录
都有一个唯一的@contentId
值。
但它没有提供所需的产出。它给出的输出像 我是XSL的新手。有谁能帮我解决这个问题吗?
问题内容: 我有一个xml代码: 我的代码: 我的问题:如何循环子节点,以便数据将变成这样: 任何帮助将不胜感激。 问题答案: 您可以使用以下功能获得所需的结果: 结果: SQLFiddle演示 了解有关功能的更多信息。 注意 :使用11.2.0.2之前的Oracle版本时,当参数设置为或(从11.2开始不推荐使用)时,您会遇到某些类型的XML查询的(错误8545377 )。将参数设置为(默认值)
问题内容: ElasticSearch中如何有多个节点?我在elasticsearch.yml中使用以下内容,但只有最后一个节点启动,浏览器抱怨:。 问题答案: 我认为最简单的方法是在命令行上指定这些参数。要启动三个节点,您只需要在elasticsearch主目录中运行以下三个命令: 另一个解决方案是创建3个不同的配置文件,并使用参数启动三个节点。
我当前的firebase结构如下所示 本来我的保安看起来 这一切都很好,因为我可以通过 然而,我想给这个分支增加更多的安全性,这样用户就不能通过写操作(读取是可以的)更新前端的代码来修改其中的一些条目。我希望用户能够根据isAdmin标志修改这些条目,例如, companyId(读:auth!=null,写:isAdmin==true) 因为所有读取=auth!=无效的起初,我认为因为我能够读取所
我想使用py2neo的OGM来表示从一个节点类型到两个节点类型的关系。 这段关系的“结束”应该指向一辆车,而不是一栋房子。但显然py2neo并不关心那么多,而是像预期的那样将所有东西都存储在数据库中:一个人、一辆车和一栋房子通过拥有关系连接起来。 现在的问题是使用上面的类来检索节点和关系。当节点属性正确加载时,关系不是: 这导致: 此行为与类对象一致。 我如何在py2neo.ogm中用同一个类建模