Xslt 解析xml以跳过标记
我有下面的样式表来跳过标记XYZ_1,XYZ_2Xslt 解析xml以跳过标记,xslt,xpath,Xslt,Xpath,我有下面的样式表来跳过标记XYZ_1,XYZ_2 我如何让它为XYZ工作_* 此外,在输出中,跳过的标记有空行,如何抑制它们 提前谢谢 <?xml version="1.0" ?> <xsl:stylesheet version="2.0" xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output met
- 我如何让它为XYZ工作_*
- 此外,在输出中,跳过的标记有空行,如何抑制它们
<?xml version="1.0" ?>
<xsl:stylesheet version="2.0" xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no" encoding="utf-8" omit-xml-declaration="yes" />
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="XYZ_1" />
<xsl:template match="XYZ_2" />
</xsl:stylesheet>
下面是示例XML
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
标记名1
1.pdf
chart1.gif
输出结果为
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
标记名1
我相信您会使用开头,如下所示:
<xsl:template match="*[starts-with(name(), 'XYZ_')]">
这应该将模板应用于以指定的四个字符开头的任何元素
从你问题的第二部分所提供的信息来看,我不确定。您能发布一个正在解析的文件示例吗?我相信您会使用开头,如下所示:
<xsl:template match="*[starts-with(name(), 'XYZ_')]">
这应该将模板应用于以指定的四个字符开头的任何元素
从你问题的第二部分所提供的信息来看,我不确定。您可以发布正在分析的文件的示例吗?使用:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
应用于提供的XML文档时:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
标记名1
1.pdf
chart1.gif
生成所需的正确结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
标记名1
说明:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
name()
以()开头,并且该模板的主体为空,这将有效地从输出中删除任何匹配的元素
指示XSLT处理器解析XML文档,忽略文档中的任何纯空白文本节点。因此,转换不会看到只有空格的节点,因此不会将此类节点复制到输出。这消除了不需要的空白,这是第二个问题<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
应用于提供的XML文档时:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
标记名1
1.pdf
chart1.gif
生成所需的正确结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
标记名1
说明:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[starts-with(name(), 'XYZ_')]"/>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<tag1>TagName1</tag1>
<XYZ_1>
<name>1.pdf</name>
</XYZ_1>
<XYZ_2>
<c_name>chart1.gif</c_name>
</XYZ_2>
</tag>
</tags>
<tags>
<tag>
<tag1>TagName1</tag1>
</tag>
</tags>
name()
以()开头,并且该模板的主体为空,这将有效地从输出中删除任何匹配的元素
指示XSLT处理器解析XML文档,忽略文档中的任何纯空白文本节点。因此,转换不会看到只有空格的节点,因此不会将此类节点复制到输出。这消除了不需要的空白,这是第二个问题只需编辑问题以反映正在解析的xml文件和输出produced只需编辑问题以反映正在解析的xml文件和输出producedGood问题+1。请参阅我的答案,以获得两个问题的完整、简短和简单的解决方案。这个解决方案使用了最基本、最强大的XSLT设计模式——覆盖标识规则。请参阅我的答案,以获得两个问题的完整、简短和简单的解决方案。此解决方案使用最基本、最强大的XSLT设计模式——覆盖标识规则。