【发布时间】:2020-05-06 06:00:06
【问题描述】:
所以我在样式表中声明了我的命名空间,像这样
<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 还很陌生,所以不太确定问题是什么,看到一些帖子提到不包括命名空间前缀选项也不起作用
【问题讨论】:
-
不确定您的期望。如果不将前缀绑定到 nemespace,则无法使用前缀,因此您报告的结果是正确的。
-
有什么办法可以做到吗?
-
首先,考虑使用文字结果元素(例如
<address:firstname>...</address:firstname>)而不是xsl:element,这仅在您想要计算元素名称时才需要。当然,如果您希望根元素声明并具有前缀,那么您需要确保不使用exclude-result-prefixes="address"。 -
是的,我也尝试了所有这些组合,
xmlns:address="http://base.google.com/ns/1.0"仍然跟随,只是如果我不删除它,那么需要它为<address:firstname>格式的 PHP 代码将无法识别它完全是一列
标签: xml xslt namespaces transform