1

我对 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,但您可以删除不需要的部分。

4

1 回答 1

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>
于 2013-10-14T07:15:39.697 回答