在Jython中的一个File对象中包装一个字符串

时间:2015-06-12 17:53:40

标签: java jython

我试图在嵌入式Jython解释器中进行一些XML DOM操作,该解释器无法访问标准库的大部分内容。为此,我希望利用java标准库(我有权访问)并使用org.w3c.domDocumentBuilderFactory或类似的。

问题是我有一个str持有XML响应,所有这些库都需要一个File或InputStream;通常我在python中做的是将字符串包装在StringIO对象中,但是这并没有在Java域中删除它。

想法?

1 个答案:

答案 0 :(得分:1)

稍微偏离主题,因为这是一个基于https://stackoverflow.com/a/562207/1774484中的想法的工作Jython示例,它将字符串包装为InputSource而不是File,但是这可以与DocumentBuilderFactory一起使用来生成org.w3c .dom.Document按要求。

import java

from java.io import StringReader
from javax.xml.parsers import DocumentBuilderFactory
from org.xml.sax import InputSource
from javax.xml.xpath import XPathFactory, XPathConstants

myString = "<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE html><html><h1>Hello</h1><h2>world!</h2></html>"

# Create an InputSource from the string
ipsrc = InputSource()
ipsrc.setCharacterStream(StringReader(myString))

# Parse the InputSource creating a Document
builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
document = builder.parse(ipsrc)

# Example: Use an XPath statement to extract the contents of all text 
# nodes in the document
xpath = XPathFactory.newInstance().newXPath()
expr = xpath.compile("//*/text()")

nodeset = expr.evaluate(document, XPathConstants.NODESET)

for i in range (0, nodeset.getLength()):
    print nodeset.item(i).getNodeValue()

以上代码适用于Jython 2.2.1,2.5.3和2.7.0。