これは私の XML (wls.xml) です。
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
これが XSD (wls.xsd)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
これは、Xpathを使用して上記のファイルを解析するために使用したJavaクラスです
public static void test1()
{
String ipFile="w3s.xml";//wls.xsd
Node fetchNode=null;
FileInputStream fileip;
try {
fileip = new FileInputStream(new File(ipFile));
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document xmlDocument = builder.parse(fileip);
System.out.println(xmlDocument.getDocumentElement().getNodeName());
System.out.println(xmlDocument.getDocumentElement().getLocalName());
evalXpath(xmlDocument,"//xs:element");//FAILS
evalXpath(xmlDocument,"//element");//FAILS
evalXpath(xmlDocument,"/schema/element");//WORKS
evalXpath(xmlDocument,"/xs:schema/xs:element");//FAILS
evalXpath(xmlDocument,"//heading");//FAILS
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void evalXpath(Document xmlDocument,String expression)
{
Node fetchNode=null;
NodeList fetchNodeList=null;
//String expression=null;
try
{
XPath xPath = XPathFactory.newInstance().newXPath();
fetchNode = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
System.out.println(fetchNode);
fetchNodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
System.out.println(fetchNodeList.getLength());
}
catch (XPathExpressionException e) {
e.printStackTrace();
}
}
}
XML ファイルを解析し、タイプ '\ElemName' の式を実行すると、問題なく動作し、ノードがフェッチされます。それから、NULLを返すXSDファイルに対して同じことをしません。XSD の場合は、'\RootNode\IntermediateNode....\ReqdNode' を訴える必要があります。XML と XSD の名前を変えて試してみましたが、説明のためにこれらの短いファイルを添付しただけです。
問題 2 また、もう 1 つ問題があります。要素 'xs:schema' があり、'schema' のようなローカル名部分 (名前空間プレフィックスなし) のみを取得する必要がある場合、どうすればよいですか? getLocalName() を試しましたが、うまくいきません。
(知る必要がある場合はjdk6を使用しています)
少なくとも最初の問題の解決策を提供してください。
前もって感謝します。