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>

XSLT1.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 に答える