Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 使用com.jcabi.jcabi-xml时,“前缀必须解析为命名空间:p”_Xpath_Jython_Jcabi - Fatal编程技术网

Xpath 使用com.jcabi.jcabi-xml时,“前缀必须解析为命名空间:p”

Xpath 使用com.jcabi.jcabi-xml时,“前缀必须解析为命名空间:p”,xpath,jython,jcabi,Xpath,Jython,Jcabi,我正在使用jython、poi和jcabi解析pptx文档 目标是找出文档中的任何动画定义 下面是片段 import sys from java.io import FileInputStream, from com.jcabi.xml import XMLDocument ffn = os.path.abspath(fn) fis = FileInputStream(ffn) ppt = XMLSlideShow(fis) p = ppt.getSlides()[0] xml = p.g

我正在使用jython、poi和jcabi解析pptx文档

目标是找出文档中的任何动画定义

下面是片段

import sys
from java.io import FileInputStream,
from com.jcabi.xml import XMLDocument

ffn = os.path.abspath(fn)
fis = FileInputStream(ffn)
ppt = XMLSlideShow(fis)

p = ppt.getSlides()[0]

xml = p.getXmlObject()
doc = XMLDocument(str(xml))

print doc.xpath("/*/p:anim")
在打印语句的最后一行,我遇到了一个异常

java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: Invalid XPath query '/*/p:anim' at com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl: javax.xml.transform.TransformerException: Prefix must resolve to a namespace: p
我在打印前添加了以下行,但错误仍然存在

doc.registerNs('p', 'http://schemas.openxmlformats.org/presentationml/2006/main')
我的问题:

如何删除“前缀必须解析”错误消息

更多信息:

下面是xml文档的一个示例片段

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <xml-fragment xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" 
xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main" 
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
...
  <p:set>
                                      <p:cBhvr>
                                        <p:cTn dur="1" fill="hold" id="6">
                                          <p:stCondLst>
                                            <p:cond delay="0"/>
                                          </p:stCondLst>
                                        </p:cTn>
                                        <p:tgtEl>
                                          <p:spTgt spid="2"/>
                                        </p:tgtEl>
                                        <p:attrNameLst>
                                          <p:attrName>style.visibility</p:attrName>
                                        </p:attrNameLst>
                                      </p:cBhvr>
                                      <p:to>
                                        <p:strVal val="visible"/>
                                      </p:to>
                                    </p:set>
                                    <p:anim calcmode="lin" valueType="num">
                                      <p:cBhvr additive="base">
                                        <p:cTn dur="500" fill="hold" id="7"/>
                                        <p:tgtEl>
                                          <p:spTgt spid="2"/>
                                        </p:tgtEl>
                                        <p:attrNameLst>
                                          <p:attrName>ppt_x</p:attrName>
                                        </p:attrNameLst>
                                      </p:cBhvr>
                                      <p:tavLst>
                                        <p:tav tm="0">
                                          <p:val>
                                            <p:strVal val="#ppt_x"/>
                                          </p:val>
                                        </p:tav>
                                        <p:tav tm="100000">
                                          <p:val>
                                            <p:strVal val="#ppt_x"/>
                                          </p:val>
                                        </p:tav>
                                      </p:tavLst>
                                    </p:anim>
你需要改变

doc.registerNs('p', 'http://schemas.openxmlformats.org/presentationml/2006/main')

XML=doc.registerNs'p','http://schemas.openxmlformats.org/presentationml/2006/main"

并对具有已注册命名空间的xml对象执行操作。指令本身对doc对象没有任何作用。它返回具有已注册命名空间的对象

干杯

doc.registerNs('p', 'http://schemas.openxmlformats.org/presentationml/2006/main')