首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用XSLT2.0查询//w:body/w:p中的所有w:r/w:t?

如何使用XSLT2.0查询//w:body/w:p中的所有w:r/w:t?
EN

Stack Overflow用户
提问于 2011-09-21 12:01:09
回答 1查看 299关注 0票数 1

这是我的Xml文件..。

代码语言:javascript
复制
<w:document>

        <w:body>

           <w:p>
                <w:r>
                    <w:t>
                      Paragraph1
                     </w:t>
                 </w:r>
             </w:p>
          </w:body>
</w:document>

这是我的第二个XML文件.

代码语言:javascript
复制
 <w:document>
    <w:body>
        <w:p>
            <w:r>
               <w:pict>
                    <v:shape>
                       <v:textbox>
                           <w:txbxContent>
                              <w:p>
                                 <w:r>
                                    <w:t>
                                       Paragraph2
                                     </w:t>
                                 </w:r>
                                </w:p>
                             </w:txbxContent>
                           <v:textbox>
                        </v:shape>
                     </w:pict>
                  </w:r>
                </w:p>
              </w:body>
             </w:document>

在这里,每当我找到//w:body/w:p/w:r/w:t时,我就编写了一个xslt文件并调用了我的模板。

代码语言:javascript
复制
   for example,


 <xsl:apply-templates select="//w:body/w:p[w:r[w:t]]">
   </xsl:apply-templates>

我自己的模板是

代码语言:javascript
复制
<xsl:template match="w:p">
            Do something here
       </xsl:template>

我的xslt在我的第一个xml document.But中正确地工作--它不能处理第二个that.So和一些类似that.So的场景,如何通过在这里修改这个查询来实现这两个场景.

代码语言:javascript
复制
<xsl:apply-templates select="?????"> <!-- how to find the case that also matching my second xml file -->
</xsl:apply-templates>

请引导我离开这个问题..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-21 12:10:20

使用

代码语言:javascript
复制
<xsl:apply-templates select="//w:p[w:r/w:t]"> 

您可以将模板的match属性更改为稍微具体一点:

代码语言:javascript
复制
<xsl:template match="w:p[w:r/w:t]"> 
  <!-- Processing here -->
</xsl:template> 

完整代码

代码语言:javascript
复制
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:w="w:w">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
   <xsl:apply-templates select="//w:p[w:r/w:t]"/>
 </xsl:template>

 <xsl:template match="w:p[w:r/w:t]">
  <xsl:value-of select="w:r/w:t"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于第一个提供的XML文档(为使其格式良好而定义的命名空间):

代码语言:javascript
复制
<w:document xmlns:w="w:w">
    <w:body>
        <w:p>
            <w:r>
                <w:t>
                 Paragraph1
             </w:t>
            </w:r>
        </w:p>
    </w:body>
</w:document>

正确的结果是

代码语言:javascript
复制
             Paragraph1

当对第二个提供的"XML"应用相同的转换时(它的格式严重错误,我花了许多分钟才使其格式良好!):

代码语言:javascript
复制
<w:document xmlns:w="w:w">
    <w:body>
        <w:p>
            <w:r>
                <w:pict>
                    <v:shape xmlns:v="v:v">
                        <v:textbox>
                            <w:txbxContent>
                                <w:p>
                                    <w:r>
                                        <w:t>
                      Paragraph2
                                        </w:t>
                                    </w:r>
                                </w:p>
                            </w:txbxContent>
                        </v:textbox>
                    </v:shape>
                </w:pict>
            </w:r>
        </w:p>
    </w:body>
</w:document>

再次想要的结果是生成

代码语言:javascript
复制
                  Paragraph2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7499379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档