给定xml的正确xsl?

时间:2010-12-24 12:15:57

标签: xml xslt

我的xml是

     <?xml version='1.0'?>
     <?xml-stylesheet type="text/xsl" href="country.xsl"?>
     <countries>
       <country name="india">
           <name>Rajan</name>
           <pop>90.09</pop>
           <car>Audi</car>
       </country>
       <country name="japan">
          <name>Yenhovong</name>
          <pop>172</pop>
          <car>Sumo</car>
       </country>
      </countries>

这里我要显示

的元素
  

国名=“日本”

使用xslt。但我不知道在xslt中匹配属性。帮助我,提前谢谢

2 个答案:

答案 0 :(得分:1)

它的Xpath表达式为country[@name = 'japan']

<强> XML

<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="country.xsl"?>
<countries>
    <country name="india">
        <name>Rajan</name>
        <pop>90.09</pop>
        <car>Audi</car>
    </country>
    <country name="japan">
        <name>Yenhovong</name>
        <pop>172</pop>
        <car>Sumo</car>
    </country>
</countries>

<强> XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="country[@name = 'japan']">
        <xsl:copy-of select="."/>
    </xsl:template>

    <xsl:template match="country"/>
</xsl:stylesheet>

<强> RESULT

<?xml version="1.0" encoding="utf-8"?>
<country name="japan">
    <name>Yenhovong</name>
    <pop>172</pop>
    <car>Sumo</car>
</country>

答案 1 :(得分:0)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="*[not(ancestor-or-self::country)]">
  <xsl:apply-templates/>
 </xsl:template>
 <xsl:template match="country[not(@name='japan')]"/>
</xsl:stylesheet>

应用于提供的XML文档

<countries>
    <country name="india">
        <name>Rajan</name>
        <pop>90.09</pop>
        <car>Audi</car>
    </country>
    <country name="japan">
        <name>Yenhovong</name>
        <pop>172</pop>
        <car>Sumo</car>
    </country>
</countries>

生成想要的正确结果

<country name="japan">
   <name>Yenhovong</name>
   <pop>172</pop>
   <car>Sumo</car>
</country>

请注意

  1. 标识规则用于“按原样”复制每个所需节点。身份模板的使用和覆盖是最基本的XSLT设计模式。

  2. 单个模板会覆盖具有country祖先或本身不是country元素的任何元素的标识规则。此类元素不会复制到输出中,但会处理其子节点。

  3. country属性不是name的任何'japan'元素匹配的覆盖模板。这有空体,这会导致忽略/删除/不复制任何此类元素。

  4. 上述1到3的结果是只有country属性为name的{​​{1}}元素由身份模板处理并复制到输出中。< / p>