Java StringTokenizer 本身并不是专门用于处理 XML 命名空间的类。但是,你可以在解析 XML 时使用其他库(如 JAXP、DOM、SAX 或 StAX)来处理命名空间。这里我将向你展示如何使用 Java 的 DOM 解析器处理 XML 命名空间。
首先,确保你已经导入了以下所需的库:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamespaceContext;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.StringReader;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
接下来,你可以使用以下代码处理 XML 命名空间:
public class XMLNamespaceExample {
public static void main(String[] args) {
String xml = "<root xmlns:ns1=\"http://example.com/ns1\" xmlns:ns2=\"http://example.com/ns2\">
<ns1:element1>Value1</ns1:element1>
<ns2:element2>Value2</ns2:element2>
</root>";
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xml)));
// 获取根元素
Element root = document.getDocumentElement();
// 获取命名空间上下文
NamespaceContext namespaceContext = root.getNamespaceContext();
// 打印命名空间
System.out.println("Namespaces:");
for (String prefix : namespaceContext.getPrefixes()) {
System.out.println("Prefix: " + prefix + ", URI: " + namespaceContext.getURI(prefix));
}
// 遍历子元素并打印命名空间
NodeList childNodes = root.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node node = childNodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Element: " + element.getTagName());
for (String prefix : namespaceContext.getPrefixes()) {
System.out.println(" Prefix: " + prefix + ", URI: " + namespaceContext.getURI(prefix));
}
}
}
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
}
}
这个示例将解析包含命名空间的 XML 字符串,并打印出命名空间及其对应的 URI。请注意,这个示例使用了 DOM 解析器,但你可以根据需要使用其他解析器。