我有以下XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:custom="http://example.com/opensearchextensions/1.0/">
<ShortName>Test</ShortName>
<Description>Testing....</Description>
<Url template="whatever" type="what" />
<Query custom:color="blue" role="example" />
</OpenSearchDescription>
Run Code Online (Sandbox Code Playgroud)
我关心的是Query元素.它有一个Namespace属性,在java中,你需要一个namespaceURI来检索值.
我的问题是:如何从根元素(在本例中为OpenSearchDescription元素)中检索命名空间列表?我想要我可以用来请求的属性,前缀和名称空间URI Query.
谢谢.
PS:我在java中使用DOM,在Java SE中使用标准.如果有可能的话,我愿意转向XPath.要求是只需要使用Java Standard API.
Ken*_*net 15
这可能会让你开始,factory.setNamespaceAware(true)毕竟是获取命名空间数据的关键.
public static void main(String[] args) throws ParserConfigurationException, SAXException,
IOException
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File(args[0]));
Element root = doc.getDocumentElement();
//prints root name space
printAttributesInfo((Node) root);
NodeList childNodes = root.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++)
{
printAttributesInfo(childNodes.item(i));
}
}
public static void printAttributesInfo(Node root)
{
NamedNodeMap attributes = root.getAttributes();
if (attributes != null)
{
for (int i = 0; i < attributes.getLength(); i++)
{
Node node = attributes.item(i);
if (node.getNodeType() == Node.ATTRIBUTE_NODE)
{
String name = node.getNodeName();
System.out.println(name + " " + node.getNamespaceURI());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12712 次 |
| 最近记录: |