提问人:Nikita 提问时间:10/13/2023 最后编辑:Nikita 更新时间:10/13/2023 访问量:89
如何从 XML 有效负载中读取特定字段,其中此有效负载将再次出现在主 XML 有效负载的字段中
How to read the specific fields from the XML payload, where this payload is coming again in the field of the main XML payload
问:
需要帮助来读取进入其中一个字段的 XML 有效负载。
请求负载:
<?xml version="1.0" encoding="UTF-8"?>
<Code xmlns:ns0="http://example.com">
<Header>
<Field1>111</Field1>
<Field2>text</Field2>
</Header>
<Trailer>
<?xml version="1.0" encoding="UTF-8"?>
<Field4>
<Field5>
<Field6>Age</Field6>
<Field7>Location</Field7>
<Field6>Age</Field6>
<Field7>Location</Field7>
</Field5>
</Field4>
</Trailer>
</Code>
上面是请求 XML 有效负载,我们在其中调用了字段,我们再次获取 XML 有效负载。我们只需要获取 从字段中的 XML 有效负载中选择的字段 并生成下面的输出。
<Trailer>
<Trailer>
预期输出有效载荷:
<?xml version="1.0" encoding="UTF-8"?>
<Code xmlns:ns0=http://example.com>
<Header>
<Field1>111</Field1>
<Field2>text</Field2>
</Header>
<Field5>
<Field6>Age</Field6>
<Field7>Location</Field7>
<Field6>Age</Field6>
<Field7>Location</Field7>
</Field5>
</Code>
我尝试使用下面的XSLT,但我很不幸地从字段中获取必填字段<Trailer>
XSLT 代码:
<?xml version='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:template match="/">
<Code>
<xsl:copy-of select="//Header" />
<xsl:value-of select="//Trailer" disable-output-escaping="yes"/>
</Code>
</xsl:template>
</xsl:stylesheet>
答:
1赞
John Ernst
10/13/2023
#1
试试这个。
<?xml version='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"/>
<!-- Identity template. -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Trailer">
<xsl:apply-templates select="Field4/Field5"/>
</xsl:template>
</xsl:stylesheet>
评论
0赞
Nikita
10/13/2023
非常感谢您的回复 XML 结构 hierarchy 正在破坏,因为 Field6 和 Field7 在 Field5 下。在 XSLT 之后,所有 Field5,6,7 都以相同的 hirerachy 出现.此外,而不是定义 Field5,6 和 7。有没有可能我们只定义 Field5,然后 Field5 下的所有字段都可以自动出现相同的 hirerachy ?
1赞
John Ernst
10/13/2023
预期的输出 XML 格式不正确。Field5 有 2 个结束标记。你能修复它,让我们知道你真正想要的吗?
0赞
John Ernst
10/13/2023
现在试一试。
1赞
y.arazim
10/13/2023
#2
这个问题并不完全清楚。可以使用以下方法产生预期结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Trailer">
<xsl:apply-templates select="Field4/Field5"/>
</xsl:template>
</xsl:stylesheet>
评论
0赞
Nikita
10/13/2023
非常感谢您的回复 XML 结构 hierarchy 正在破坏,因为 Field6 和 Field7 在 Field5 下。在 XSLT 之后,所有 Field5,6,7 都以相同的 hirerachy 出现.此外,而不是定义 Field5,6 和 7。有没有可能我们只定义 Field5,然后 Field5 下的所有字段都可以自动出现相同的 hirerachy ?
0赞
y.arazim
10/13/2023
我已经编辑了我的答案以匹配您更新的问题。
评论
xslt-1.0
xslt-2.0
xslt-3.0