XSLT过滤XML以创建更短的精炼XML树

时间:2013-10-14 05:09:45

标签: xml xslt

我对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,以保留其祖先树,但是您可以删除不需要的部分。

1 个答案:

答案 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>