我对XSLT的了解非常有限,而我追逐的内容可能非常简单。 使用XSLT 1.0
我有一些像这样的XML ......(简化为简化)
<?xml version="1.0" encoding="UTF-8"?>
<Report schema="1.0">
<Item name="cabinet" id="1" />
<Item name="cabinet" id="2" />
<Item name="cabinet" id="3" />
<DocumentProperties>
<PageProperties name="Page 1" pagenum="1" />
<Paths>
<Data>C:\Data\</Data>
<Library>C:\Library\</Library>
<Table>C:\Table\</Table>
<Picture>C:\Bitmap\</Picture>
<Report>C:\Report\</Report>
<Template>C:\Template\</Template>
<Backup>C:\Backup\</Backup>
<Program>C:\</Program>
</Paths>
<Application>
<Product>CabPro</Product>
<Family>Software</Family>
<Version>8.0.61.2700</Version>
<Build>2013.10.4.0</Build>
<Desc />
<Company>Q1</Company>
<Account>QSystems Pty Ltd</Account>
</Application>
</DocumentProperties>
</Report>
我需要阅读已创建的庞大的大型XML,并将废弃物过滤掉以获得所需的信息树。
例如......
<?xml version="1.0"?>
<Report schema="1.0">
<Paths>
<Data>C:\Data\</Data>
<Library>C:\Library\</Library>
<Table>C:\Table\</Table>
<Picture>C:\Bitmap\</Picture>
<Report>C:\Report\</Report>
<Template>C:\Template\</Template>
<Backup>C:\Backup\</Backup>
<Program>C:\</Program>
</Paths>
</Report>
您如何要求XSLT以这样的方式处理XML到XML,以保留其祖先树,但是您可以删除不需要的部分。
答案 0 :(得分:2)
我会做类似于ColinE的事情,但这个版本不会删除属性。
我认为这个问题有点不同。而不是尝试指定要删除的元素,而是标识我们要保留的部分(DocumentProperties/Paths
)。
XML输入
<Report schema="1.0">
<Item name="cabinet" id="1"/>
<Item name="cabinet" id="2"/>
<Item name="cabinet" id="3"/>
<DocumentProperties>
<PageProperties name="Page 1" pagenum="1"/>
<Paths>
<Data>C:\Data\</Data>
<Library>C:\Library\</Library>
<Table>C:\Table\</Table>
<Picture>C:\Bitmap\</Picture>
<Report>C:\Report\</Report>
<Template>C:\Template\</Template>
<Backup>C:\Backup\</Backup>
<Program>C:\</Program>
</Paths>
<Application>
<Product>CabPro</Product>
<Family>Software</Family>
<Version>8.0.61.2700</Version>
<Build>2013.10.4.0</Build>
<Desc/>
<Company>Q1</Company>
<Account>QSystems Pty Ltd</Account>
</Application>
</DocumentProperties>
</Report>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@*|DocumentProperties/Paths"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XML输出
<Report schema="1.0">
<Paths>
<Data>C:\Data\</Data>
<Library>C:\Library\</Library>
<Table>C:\Table\</Table>
<Picture>C:\Bitmap\</Picture>
<Report>C:\Report\</Report>
<Template>C:\Template\</Template>
<Backup>C:\Backup\</Backup>
<Program>C:\</Program>
</Paths>
</Report>