2015-08-18 24 views
2

有沒有辦法修改由vtd-xml解析的XML模式位置?使用vtd-xml和xPath修改XMLSchema位置

的XML文件看起來像

<rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xmlSchema.xsd"> 
. 
. 
. 
</rootElement> 

最好的解決辦法是使用XPath。我試圖

/rootElement/@* 

與DOM的作品,但不與VTD-XML的

這裏是我的代碼

String xPath = "/rootElement/@*" 
XMLModifier xm = new XMLModifier(); 
VTDGen vg = new VTDGen(); 
if (vg.parseFile(fnIn,true)){ 
     VTDNav vn = vg.getNav(); 
     xm.bind(vn); 
     nodeXpath(xPath,vn); 
} 

private void nodeXpath(String xPath, VTDNav vn) throws Exception{ 
    int result; 

    AutoPilot ap = new AutoPilot(); 
    ap.selectXPath(xPath); 
    ap.bind(vn); 
    while((result = ap.evalXPath())!=-1){ 
    System.out.println(vn.getAttrVal("xsi:noNamespaceSchemaLocation") + ", " + vn.getText() + ", " + vn.toString(result)); 
    xm.updateToken(result,"test"); 
     int p = vn.getText(); 

     if (p!=-1) {     
      System.out.println(vn.getText() + ", " + vn.toString(p));    
     } 
    } 
} 

打印到屏幕的結果是: 10,-1,XSI:no​​NamespaceSchemaLocation

和輸出xml是

test 
<rootElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" test="xmlSchema.xsd"> 

元素名稱似乎已被修改,並且其他測試位於頂部? 我的錯誤在哪裏?我如何更改屬性值?

感謝您的幫助。

+0

您可以將parsefile的名稱空間感知設置爲false嗎? –

+0

對不起,我不認爲getText()適用於屬性值。此外,輸出也沒有意義。 –

+0

我試過了,但沒有任何變化 – Kepler

回答

0

好的,這是我對你的代碼的修改。結果是屬性名稱標記索引。而「result + 1」應該是屬性值標記索引。讓我知道它是否適用於您。

AutoPilot ap = new AutoPilot(); 
ap.selectXPath(xPath); 
ap.bind(vn); 
while((result = ap.evalXPath())!=-1){ 
// System.out.println(vn.getAttrVal("xsi:noNamespaceSchemaLocation") + ", " + vn.getText() + ", " + vn.toString(result)); 
xm.updateToken(result_+1,"test"); 
+0

結果+ 1是解決方案。它的工作原理,謝謝! – Kepler