我想从xml中删除XMLNS =“http:// ......”。我正在使用以下代码从元素中删除XMLNS,但这也剥离了我不想要的elemenet前缀..请帮助......
输入:
<rss xmlns="http://www.ibm.org/wcmxml">
<channel xmlns="">
<title>Products WCI Feed</title>
<link>http://www.ibm.com/feeds/sample.rss</link>
<description>Products WCI RSS Feed</description>
<lastBuildDate>Thu, 07 Nov 2013 11:30:00 EET</lastBuildDate>
<ibmfs:etag xmlns:ibmfs="http://purl.org/net/ibmfeedsvc/feedsvc/1.0">FeedServiceServlet</ibmfs:etag>
<item>
<title>Product Name</title>
<link>http://www.source-ECM-Domain.com/item/sample.htm</link>
<description>Product Description</description>
<pubDate>Thu, 07 Nov 2013 11:45:00 EET</pubDate>
<guid>UniqieIDFromECMUpTo256Char00</guid>
<category>/Taxonomy1/Category10/Category100</category>
<author>author@us.ibm.com</author>
<ibmwcm:action xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">add</ibmwcm:action>
<ibmwcm:itemType xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">Content</ibmwcm:itemType>
<ibmwcm:library xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">TGCS WCI Feed Service</ibmwcm:library>
<ibmwcm:path xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">/Products</ibmwcm:path>
<ibmwcm:displayTitle xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">ProductName</ibmwcm:displayTitle>
<ibmwcm:authoringTemplate xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">TGCS WCI Feed Service/AT Product Info</ibmwcm:authoringTemplate>
<ibmwcm:workflow xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0" name="WFSystem">
<ibmwcm:workflowStage>WFStageSystemPublish</ibmwcm:workflowStage>
</ibmwcm:workflow>
<ibmwcm:publishDate xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">Thu, 07 Nov 2013 15:14:00 EET</ibmwcm:publishDate>
<ibmwcm:expirationDate xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">Fri, 17 Jul 2014 11:00:00 EET</ibmwcm:expirationDate>
</item>
</channel>
</rss>
输出:
<rss xmlns="http://www.ibm.org/wcmxml">
<channel xmlns="">
<title>Products WCI Feed</title>
<link>http://www.ibm.com/feeds/sample.rss</link>
<description>Products WCI RSS Feed</description>
<lastBuildDate>Thu, 07 Nov 2013 11:30:00 EET</lastBuildDate>
<etag>FeedServiceServlet</etag>
<item>
<title>Product Name</title>
<link>http://www.source-ECM-Domain.com/item/sample.htm</link>
<description>Product Description</description>
<pubDate>Thu, 07 Nov 2013 11:45:00 EET</pubDate>
<guid>UniqieIDFromECMUpTo256Char00</guid>
<category>/Taxonomy1/Category10/Category100</category>
<author>author@us.ibm.com</author>
<action>add</action>
<itemType>Content</itemType>
<library>TGCS WCI Feed Service</library>
<path>/Products</path>
<displayTitle>ProductName</displayTitle>
<authoringTemplate>TGCS WCI Feed Service/AT Product Info</authoringTemplate>
<workflow name="WFSystem">
<workflowStage>WFStageSystemPublish</workflowStage>
</workflow>
<publishDate>Thu, 07 Nov 2013 15:14:00 EET</publishDate>
<expirationDate>Fri, 17 Jul 2014 11:00:00 EET</expirationDate>
</item>
</channel>
</rss>
期待:
<rss>
<channel>
<title>Products WCI Feed</title>
<link>http://www.ibm.com/feeds/sample.rss</link>
<description>Products WCI RSS Feed</description>
<lastBuildDate>Thu, 07 Nov 2013 11:30:00 EET</lastBuildDate>
<ibmfs:etag xmlns:ibmfs="http://purl.org/net/ibmfeedsvc/feedsvc/1.0">FeedServiceServlet</ibmfs:etag>
<item>
<title>Product Name</title>
<link>http://www.source-ECM-Domain.com/item/sample.htm</link>
<description>Product Description</description>
<pubDate>Thu, 07 Nov 2013 11:45:00 EET</pubDate>
<guid>UniqieIDFromECMUpTo256Char00</guid>
<category>/Taxonomy1/Category10/Category100</category>
<author>author@us.ibm.com</author>
<ibmwcm:action>add</ibmwcm:action>
<ibmwcm:itemType>Content</ibmwcm:itemType>
<ibmwcm:library>TGCS WCI Feed Service</ibmwcm:library>
<ibmwcm:path>/Products</ibmwcm:path>
<ibmwcm:displayTitle>ProductName</ibmwcm:displayTitle>
<ibmwcm:authoringTemplate>TGCS WCI Feed Service/AT Product Info</ibmwcm:authoringTemplate>
<ibmwcm:workflow name="WFSystem">
<ibmwcm:workflowStage>WFStageSystemPublish</ibmwcm:workflowStage>
</ibmwcm:workflow>
<ibmwcm:publishDate>Thu, 07 Nov 2013 15:14:00 EET</ibmwcm:publishDate>
<ibmwcm:expirationDate>Fri, 17 Jul 2014 11:00:00 EET</ibmwcm:expirationDate>
</item>
</channel>
</rss>
使用XLST:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<!-- remove element prefix -->
<xsl:element name="{local-name()}">
<!-- process attributes -->
<xsl:for-each select="@*">
<!-- remove attribute prefix -->
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
请帮助我根本不想在XML中使用XMLNS。
谢谢, 作者Srini
答案 0 :(得分:2)
你无法完全避免使用xmlns:ibmwcm
,因为没有它,带有ibmwcm
前缀名称的元素不是命名空间良好的形式。但是你可以将声明提升到更高的级别,而不是在每个使用前缀的子元素上重复它。
除此之外,输入文档和预期输出文档之间唯一的语义差异在于输入中rss
命名空间中的根级元素为http://www.ibm.org/wcmxml
,并且在您的预期输出中它是{ {em> no 命名空间中的{1}}。所以以下内容应该足够了:
rss
这会产生以下输出:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/*">
<rss xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">
<xsl:copy-of select="node()" />
</rss>
</xsl:template>
</xsl:stylesheet>
删除了相同名称空间的所有重复声明,并删除<rss xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0">
<channel>
<title>Products WCI Feed</title>
<link>http://www.ibm.com/feeds/sample.rss</link>
<description>Products WCI RSS Feed</description>
<lastBuildDate>Thu, 07 Nov 2013 11:30:00 EET</lastBuildDate>
<ibmfs:etag xmlns:ibmfs="http://purl.org/net/ibmfeedsvc/feedsvc/1.0">FeedServiceServlet</ibmfs:etag>
<item>
<title>Product Name</title>
<link>http://www.source-ECM-Domain.com/item/sample.htm</link>
<description>Product Description</description>
<pubDate>Thu, 07 Nov 2013 11:45:00 EET</pubDate>
<guid>UniqieIDFromECMUpTo256Char00</guid>
<category>/Taxonomy1/Category10/Category100</category>
<author>author@us.ibm.com</author>
<ibmwcm:action>add</ibmwcm:action>
<ibmwcm:itemType>Content</ibmwcm:itemType>
<ibmwcm:library>TGCS WCI Feed Service</ibmwcm:library>
<ibmwcm:path>/Products</ibmwcm:path>
<ibmwcm:displayTitle>ProductName</ibmwcm:displayTitle>
<ibmwcm:authoringTemplate>TGCS WCI Feed Service/AT Product Info</ibmwcm:authoringTemplate>
<ibmwcm:workflow name="WFSystem">
<ibmwcm:workflowStage>WFStageSystemPublish</ibmwcm:workflowStage>
</ibmwcm:workflow>
<ibmwcm:publishDate>Thu, 07 Nov 2013 15:14:00 EET</ibmwcm:publishDate>
<ibmwcm:expirationDate>Fri, 17 Jul 2014 11:00:00 EET</ibmwcm:expirationDate>
</item>
</channel>
</rss>
和xmlns
上的rss
声明。
答案 1 :(得分:0)
如果我理解正确,您希望删除任何名称空间的XML,同时保留ibmwcm:
之类的前缀。
这是不可能的,也没有意义。
让我们稍微澄清一下这个问题。查看以下命名空间声明:
xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0"
该指令执行以下操作:它将http://purl.org/net/ibmfeedsvc/wcm/1.0
声明为XML文件中的命名空间,并且还告诉您ibmwcm
用作其前缀。前缀只是编写整个命名空间的一种较短方式。所以,
<ibmwcm:workflow/>
实际上意味着:
<workflow xmlns="http://purl.org/net/ibmfeedsvc/wcm/1.0"/>
现在,你明白为什么将前缀与命名空间分开是没有意义的,因为两者都表示相同。
然而,您的XML仍有实际改进的空间。您不能完全从XML中删除命名空间声明,但您可以在文档节点(根节点)上声明它,如下所示:
<rss xmlns:ibmwcm="http://purl.org/net/ibmfeedsvc/wcm/1.0"/>
后来仅将其称为:
<ibmwcm:workflow/>
这样,您就不必多次重复命名空间,就像输入XML一样。
答案 2 :(得分:-2)
您不想删除XMLNS。没有它,XML将无法运行。它给出了用于消除元素名称歧义的命名空间。您可以通过使命名空间像这样
来删除XSL:previxxmlns="http://www.w3.org/1999/XSL/Transform"
这是阅读名称空间的好地方