我想是這樣創造的xml:XSLT在具有相同的名稱空間聲明根元素內標籤缺失的命名空間
<rns:RootElement xmlns:rns="urn:root-element" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:ins="urn:inner-doc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value>Some text</ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>
有了這個模板:
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<rns:RootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rns="urn:root-element"
xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ins="urn:inner-doc"
xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value><xsl:value-of select="//*[local-name()='SomeNode']"/></ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>
</xsl:template>
但是,相反的結果我想要這個模板給了我一點點不同的結果:
<rns:RootElement xmlns:rns="urn:root-element" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:root-element root-element.xsd">
<rns:DocumentWrapper>
<ins:InnerDoc xmlns:ins="urn:inner-doc" xsi:schemaLocation="urn:inner-doc inner-doc.xsd">
<ins:Value>Some text</ins:Value>
</ins:InnerDoc>
</rns:DocumentWrapper>
</rns:RootElement>
正如你所看到的,在轉換結果中,InnerDoc元素缺少xmlns:xsi =「http://www.w3.org/2001/XMLSchema-instance」命名空間的定義,有什麼辦法可以防止丟失這個命名空間嗎?
要稍微擴展Martin Honnen的回答,我想指出缺少重複的'ins'命名空間聲明**不會執行任何操作**。任何一致的XML處理器都會認識到,根元素上的'ins'名稱空間聲明也適用於'ins:InnerDoc'元素。任何將此'ins:InnerDoc'元素的位置移動到其他位置(根元素上的聲明不適用)的位置的一致XSL處理器也將根據需要添加到名稱空間聲明中。 –
我知道,但這個要求來自其他系統,我真的不知道他們是否會在沒有這個名稱空間的情況下正確收到我的消息。無論如何,謝謝你的評論! –