如何从XML文件中提取节点之间的文本数据?

时间:2014-06-13 06:05:23

标签: xml xslt xslt-1.0

<?xml-stylesheet type="text/css" href="home.css"?>
<Header type="text">
  <encodingDesc>
    <samplingDesc>Samples taken from page 10-11,20-21,38-39, 54-55, 70-71, 80-81, 98-99, 122-123, 142-143, 148-149, 162-163, 174-175 </samplingDesc>
  </encodingDesc>
  <sourceDesc>
    <mainContent>
      <source> Abhinesh
        <category>Natural, Physical and Professional Sciences</category>
        <subcategory>Textile Technology</subcategory>
        <text> Book </text>
        <title> cloths </title>
        <vol> 1 </vol>
        <issue/>
      </source>
      <textDes>
        <type/>
        <headline/>
        <author> V. Nurjan </author>
        <translator/>
        <words>3364</words>
      </textDes>
    </mainContent>
  </sourceDesc>
  <profileDesc>
    <creation>
      <date> 21-Dec-2010 </date>
      <inputter> Abhinesh </inputter>
    </creation>
    <langUsage> Telugu </langUsage>
    <textClass>
      <channel mode="w"> print </channel>
      <domain type="public"/>
    </textClass>
  </profileDesc>
</Header>

我检查了互联网上的每个例子,但他们只提供简单XML文件的代码,但不是这种类型。如何从这样的XML文件中提取标记数据?

1 个答案:

答案 0 :(得分:1)

您可以使用简单的XSL转换来实现您的目的。要将所有文本作为文本文件提取,您可以使用以下XSL样式表。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:strip-space elements="*" />
    <xsl:output method="text" encoding="UTF-8" />

    <xsl:template match="node()">
        <xsl:if test="boolean(normalize-space(text()))">
            <xsl:value-of select="normalize-space(text())" /><xsl:text>&#xA;</xsl:text>
        </xsl:if>
        <xsl:apply-templates select="node()"/>
    </xsl:template>
</xsl:stylesheet>

要执行此样式表,如果您使用类似Unix的操作系统,则需要一个像Saxonxsltproc的XSL解析器。

您还可以使用IE,Firefox或任何其他所需的浏览器轻松测试它。

只需将样式表保存在xml源文件所在的文件夹中即可。例如test.xsl,然后从

更改xml文件的标题
<?xml-stylesheet type="text/css" href="home.css"?>

<?xml-stylesheet type="text/xsl" href="test.xsl"?>

然后输出看起来像那样

Samples taken from page 10-11,20-21,38-39, 54-55, 70-71, 80-81, 98-99, 122-123, 142-143, 148-149, 162-163, 174-175
Abhinesh
Natural, Physical and Professional Sciences
Textile Technology
Book
cloths
1
V. Nurjan
3364
21-Dec-2010
Abhinesh
Telugu
print