java - 在 XPath 表达式中使用整数变量 Java 从具有 namespace 的重复节点中提取信息

标签 java xpath

解决了!谢谢大家!

您的建议让我找到了答案。所以你们所有人的建议都值得感谢。

放置 int 变量的解决方案如下:

//Put my xpath into a string variable where it can evaluate my integer "counter"

String myString = "/*[local-name()='root' and namespace-uri()='DK']/*[local-name()='book' and namespace-uri()='DK']" + counter + "]/*[local-name()='item1' and namespace-uri()='DK']/*[local-name()='item2' and namespace-uri()='DK']/*[local-name()='date' and namespace-uri()='DK'][" + counter + "]"


//Then simply put that string variable into the xpath expression.
System.out.print(myString); 

原始问题如下:

首先,我感谢任何帮助。预先感谢您的帮助。

我有一个需要解析的 XML 文件。

举个例子......

<root xmlns="DK">
  <book>
    <item1>
      <item2>
        <date>xxx
        </date>
        <date>x1x1x1
        </date>
      </item2>
    </item1>
  </book>
  <book>
    <item1>
      <item2>
        <date>yyy
        </date>
        <date>y1y1y1
        </date>
      </item2>
    </item1>
  </book>    
</root>

所以基本上,我正在寻找带有 xxx 的节点 ,然后转到下一本书中包含 yyy 的相同节点

输入 xml 文件将包含未知数量的重复书籍,每本书的信息不同。

我选择尝试这样的事情。

// I've imported from dom4j SAXreader. I probably could use something different.
import org.dom4j.io.SAXReader;



// Variables
Document document = null;       

// Take input from file    
SAXReader reader = new SAXReader();
document = reader.read("E:/templates/test.xml");

int counter = 0;
int numofbooks = 0;

Element root = document.getRootElement();

for ( Iterator i = root.elementIterator("book"); i.hasNext();) {
    Element element = (Element) i.next();

counter = counter + 1;
numofbooks = counter;
}

System.out.println("There are " + numofbooks + " books required for processing");
while(counter != numofbooks); {
counter = counter + 1;

System.out.print("The values are: ");

// ----- This here is my problem code ----- //
System.out.print(/*[local-name()='root' and namespace-uri()='DK']/*[local-name()='book' and namespace-uri()='DK'][counter]/*[local-name()='item1' and namespace-uri()='DK']/*[local-name()='item2' and namespace-uri()='DK']/*[local-name()='date' and namespace-uri()='DK'][counter]).getStringValue());


System.out.print(" respectively");
}

我的问题就出在这里。因为嵌套了一些具有完全相同名称的重复节点,所以我使用整数计数器变量按数字抓取它们。

我的 XPath 表达式无法理解我放入的变量“计数器”是一个整数。

我可以使用任何语法来完成这项工作吗? 还是根本不可能?

提前致谢。

DK

最佳答案

您可以在 XPath 表达式中引用变量 $counter,并且可以通过定义 XPathVariableResolver 并将其与 XPathFactory 关联来从 Java API 设置该变量的值。

关于java - 在 XPath 表达式中使用整数变量 Java 从具有 namespace 的重复节点中提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871229/

相关文章:

java - REST 中需要返回 2 组不同响应的 HTTP GET 响应的正确设计原则是什么

java - 创建一个动态调整其宽度的文本字段

java - Google AppEngine session 示例

xpath - 无法评估 XPath (Behat/Mink)

javascript - 使用 Javascript 动态实现 Spring Security

java - 如何使用java反转数组中的字符元素?

不使用 XmlDocument 的 C# xml 读/写/xpath

xml - 来自带有命名空间前缀的 xml 的 xpath 表达式

php - 如何使用 XPath 选择该元素末尾的文本?

java - "JAXWS wsimport"表示 "jaxb file binding"中的 XPath 为空