带有声明多个名称空间的XPath命令

时间:2016-02-19 09:05:00

标签: java xml xpath

我目前正在尝试使用java库org.apache.xmlbeans.XmlCursor使用命令XMLCursor.selectPath(“ XPath Call goes here”)引用XML文档中的节点。

我可以使用以下命令获取此命令:

picCur.selectPath("declare namespace p='http://schemas.openxmlformats.org/drawingml/2006/main'; .//p:blip");

但是现在我希望选择具有特定属性的元素。这通常是使用相同的命令使用.//p:blip [@embed="attribute value“完成的,但该属性与元素具有不同的命名空间,我很难找到在执行Xpath之前声明两个命名空间的方法命令。这是我一直试图使用的命令:

picCur.selectPath("declare namespace p='http://schemas.openxmlformats.org/drawingml/2006/main' ” + 
                "declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships' " +
                ".//p:blip[@r:embed=' attribute value ']"); 

以下是xml代码,非常感谢您的帮助。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
  <p:cSld>
    <p:spTree>
      <p:nvGrpSpPr>
        <p:cNvPr id="1" name="" />
        <p:cNvGrpSpPr/>
        <p:nvPr/></p:nvGrpSpPr>
      <p:grpSpPr>
        <a:xfrm><a:off x="0" y="0" /><a:ext cx="0" cy="0" /><a:chOff x="0" y="0" /><a:chExt cx="0" cy="0" /></a:xfrm>
      </p:grpSpPr>
      <p:sp>
        <p:nvSpPr>
          <p:cNvPr id="2" name="Title 1" />
          <p:cNvSpPr><a:spLocks noGrp="1" />
          </p:cNvSpPr>
          <p:nvPr>
            <p:ph type="title" /></p:nvPr>
        </p:nvSpPr>
        <p:spPr/>
        <p:txBody><a:bodyPr/><a:lstStyle/>
          <a:p>
            <a:r><a:rPr lang="en-GB" dirty="0" smtClean="0" />
              <a:t>Worlds Cutest Dragon</a:t>
            </a:r><a:endParaRPr lang="en-GB" dirty="0" /></a:p>
        </p:txBody>
      </p:sp>
      <p:pic>
        <p:nvPicPr>
          <p:cNvPr id="4" name="myDragon" />
          <p:cNvPicPr><a:picLocks noGrp="1" noChangeAspect="1" />
          </p:cNvPicPr>
          <p:nvPr>
            <p:ph idx="1" /></p:nvPr>
        </p:nvPicPr>
        <p:blipFill>
          <a:blip r:embed="rId2">
            <a:extLst>
              <a:ext uri="{28A0092B-C50C-407E-A947-70E740481C1C}"><a14:useLocalDpi xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" val="0" />
              </a:ext>
            </a:extLst>
          </a:blip>
          <a:stretch><a:fillRect/></a:stretch>
        </p:blipFill>
        <p:spPr>
          <a:xfrm><a:off x="3643312" y="2634456" /><a:ext cx="1857375" cy="2457450" /></a:xfrm>
        </p:spPr>
      </p:pic>
    </p:spTree>
    <p:extLst>
      <p:ext uri="{BB962C8B-B14F-4D97-AF65-F5344CB8AC3E}">
        <p14:creationId xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main" val="2185825445" />
      </p:ext>
    </p:extLst>
  </p:cSld>
  <p:clrMapOvr><a:masterClrMapping/>
  </p:clrMapOvr>
</p:sld>

2 个答案:

答案 0 :(得分:0)

您是否尝试声明第一个命名空间然后另一个命名空间?

picCur.selectPath("
    declare namespace p='http://schemas.openxmlformats.org/drawingml/2006/main'; 
    declare namespace r='http://schemas.openxmlformats.org/officeDocument/2006/relationships'; 
    .//p:blip[@r:embed='value']
");

答案 1 :(得分:0)

请通过将saxonb,saxon-dom,xbean jar添加到服务器来尝试..