如何在xslt转换的结果中摆脱xmlns =“”?见里面

时间:2013-06-08 12:46:40

标签: perl xslt

我正在尝试从我的XML中创建ONIX。这是XSL文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink" mediatype="application/xml">
<xsl:output method="xml" encoding="utf-8" />
<xsl:template match="books">
    <xsl:variable name="SentDate"><xsl:value-of select="translate(@timestamp,'- :','')" /></xsl:variable>
<ONIXMessage xmlns="http://www.editeur.org/onix/2.1/reference">
    <Header>
        <FromCompany>MyCompany</FromCompany>
        <ToCompany>Google Play</ToCompany>
        <SentDate><xsl:value-of select="substring($SentDate,1,string-length($SentDate) - 2)" /></SentDate>
    </Header>
    <xsl:apply-templates />
</ONIXMessage>
</xsl:template>

<xsl:template match="books/book">
    <Product>
        <RecordReference><xsl:value-of select="@id" /></RecordReference>
    </Product>
</xsl:template>

以下是转换用XML:

<books xmlns:l="http://www.w3.org/1999/xlink" timestamp="2013-05-27 22:03:02">
  <book id="1">...</book>
  <book id="2">...</book>
  <book id="3">...</book>
</books>

以下是转型的结果:

<?xml version="1.0" encoding="utf-8"?>
<ONIXMessage xmlns="http://www.editeur.org/onix/2.1/reference" xmlns:xlink="http://www.w3.org/1999/xlink">
<Header>
  <FromCompany>MyCompany</FromCompany>
  <ToCompany>Google Play</ToCompany>
  <SentDate>201305272203</SentDate>
</Header>
<Product xmlns="">
  <RecordReference>1</RecordReference>
</Product>
<Product xmlns="">
  <RecordReference>2</RecordReference>
</Product>
<Product xmlns="">
  <RecordReference>3</RecordReference>
</Product>
</ONIXMessage>

所以,问题是:如何摆脱所有产品节点中的那些 xmlns =“”?提前谢谢。

1 个答案:

答案 0 :(得分:1)

看起来我知道如何修复它。我应该为我的所有模板声明相同的xmlns(http://www.editeur.org/onix/2.1/reference),以便每个元素都在该命名空间中。