gpt4 book ai didi

xml - XML 元素名称中包含的 XSLT 命名空间 URI

转载 作者:行者123 更新时间:2023-12-04 17:01:27 25 4
gpt4 key购买 nike

所以我在样式表中声明了我的命名空间

<xmlns:address="http://base.google.com/ns/1.0"

下面是我的整个 XSLT 转换模板
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:address="http://base.google.com/ns/1.0" exclude-result-prefixes="address">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="success"/>
<xsl:template match="paging"/>
<xsl:template match="orders">
<xsl:element name="Items" >
<xsl:for-each select="order">
<xsl:element name="item">
<xsl:element name="entity_id">
<xsl:value-of select="order_no"/>
</xsl:element>
<xsl:element name="grand_total">
<xsl:value-of select="total"/>
</xsl:element>
<xsl:element name="shipping_amount">
<xsl:value-of select="shipping"/>
</xsl:element>
<xsl:element name="state">
<xsl:value-of select="status"/>
</xsl:element>
<xsl:element name="created_at">
<xsl:value-of select="created"/>
</xsl:element>
<xsl:for-each select="client">
<address:customer_id>
<xsl:value-of select="client_id"/>
</address:customer_id>
<xsl:element name="address:firstname">
<xsl:value-of select="first_name"/>
</xsl:element>
<xsl:element name="address:lastname">
<xsl:value-of select="last_name"/>
</xsl:element>
<xsl:element name="address:company">
<xsl:value-of select="company"/>
</xsl:element>
<xsl:element name="address:street">
<xsl:value-of select="street"/>
</xsl:element>
<xsl:element name="address:city">
<xsl:value-of select="city"/>
</xsl:element>
<xsl:element name="address:telephone">
<xsl:value-of select="phone"/>
</xsl:element>
<xsl:element name="address:email">
<xsl:value-of select="email"/>
</xsl:element>
<xsl:element name="address:region">
<xsl:value-of select="country"/>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="items">
<xsl:for-each select="item">
<xsl:element name="product_name">
<xsl:value-of select="name"/>
</xsl:element>
<xsl:element name="product_id">
<xsl:value-of select="product_id"/>
</xsl:element>
<xsl:element name="price">
<xsl:value-of select="price"/>
</xsl:element>
<xsl:element name="item_id">
<xsl:value-of select="item_id"/>
</xsl:element>
<xsl:element name="tax">
<xsl:value-of select="tax"/>
</xsl:element>
<xsl:element name="qty">
<xsl:value-of select="qty"/>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>

我的意图是创建这样的命名空间节点 <address:lastname>但我得到的结果是 <address:firstname xmlns:address="http://base.google.com/ns/1.0">我对 XSLT 还很陌生,所以不太确定是什么问题,看到一些帖子提到排除命名空间前缀选项也不起作用

最佳答案

首先,您报告的结果是正确的:格式良好的 XML 文档不能使用前缀而不将其绑定(bind)到 namespace 。如果您的目标应用程序无法处理此问题,则它不符合 XML 规范。

但是,您可以尝试将命名空间声明移动到您的根元素,而不是在每个 address::* 上重复它。元素。代替:

<xsl:element name="Items" >

利用:
<Items xmlns:address="http://base.google.com/ns/1.0">

并从您的 xsl:stylesheet 中删除相同的命名空间声明开始标记。这应该会产生一个结构如下的文档:
<Items xmlns:address="http://base.google.com/ns/1.0">
<item>
<entity_id/>
<grand_total/>
<shipping_amount/>
<state/>
<created_at/>
<address:customer_id/>
<address:firstname/>
<address:lastname/>
<address:company/>
<address:street/>
<address:city/>
<address:telephone/>
<address:email/>
<address:region/>
</item>
</Items>

希望您的目标应用程序可以比您的(语义相同的)当前结果处理得更好。

如评论中所述,您可以通过替换所有其他 xsl:element 来简化您的样式表。也带有文字结果元素的指令。

关于xml - XML 元素名称中包含的 XSLT 命名空间 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com