Tag: xpath

从XPath表达式填充XML模板文件?

从XPath表达式的映射中填充(或生成)XML模板文件的最佳方法是什么? 要求是我们需要从模板开始(因为这可能包含未在XPath表达式中捕获的信息)。 例如,起始模板可能是: ?XXX? ?XXX? ?999.99? ??? ??? 然后我们提供,例如: expression: /create/article[1]/id => 1 expression: /create/article[1]/description => bar expression: /create/article[1]/name[1] => foo expression: /create/article[1]/price[1]/amount => 00.00 expression: /create/article[1]/price[1]/currency => USD expression: /create/article[2]/id => 2 expression: /create/article[2]/description => some name expression: /create/article[2]/name[1] => some description expression: /create/article[2]/price[1]/amount => 00.01 expression: /create/article[2]/price[1]/currency => USD 然后我们应该生成: foo bar 00.00 […]

如何将XML文件压缩为一组xpath表达式?

考虑我有以下示例XML文件: foo bar 00.00 USD 1 什么是将其展平为一组xpath表达式的最佳(最有效)方法。 另请注意:我想忽略任何命名空间和属性信息。 (如果需要,这也可以作为预处理步骤完成)。 所以我想得到输出: /create/article/name /create/article/description /create/article/price/amount /create/article/price/currency /create/article/id 我正在用Java实现。 编辑: PS,我可能还需要这个在文本节点没有数据的情况下工作,所以例如,以下应该生成与上面相同的输出:

使用SAX解析器,如何解析具有相同名称标签但在不同元素中的xml文件?

是否可以在SAX解析器中提供路径表达式? 我有一个XML文件,它有几个相同的名称标签,但它们在不同的元素中。 有没有办法区分它们。 这是XML: 335823 Fairfax High School 4195653 Will Turner 4195654 Bruce Paltrow 4195655 Santosh Gowswami 335824 FallsChurch High School 4153 John Singer 4154 Shane Warne 4155 Eddie Diaz 我想根据学校的名称和ID来区分学生的姓名和身份certificate。 谢谢你的回复: 我创建了一个学生pojo,其中包含以下字段:school_id,school_name,student_id和student_name以及getter和setter方法。 这是我的临时解析器实现。 当我解析xml时,我需要将学校名称,id,学生姓名,id的值放在pojo中并返回它。 你能告诉我如何实现堆栈以区分。 这是我的解析器框架:: import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class HandleXML extends DefaultHandler { private student info; private boolean school_id […]

使用xpath在Java中使用名称空间解析XML

我试图在java中解析SOAP请求,但代码没有返回任何节点这里是代码可以任何人发现错误 String xml=”dfasf@google.comPfasdfRem91″; System.out.println(xml); DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xml))); XPath xpath = XPathFactory.newInstance().newXPath(); // XPath Query for showing all nodes value try { XPathExpression expr = xpath.compile(“/soapenv:Envelope/soapenv:Header/authInfo/password”); Object result = expr.evaluate(doc, XPathConstants.NODESET); NodeList nodes = (NodeList) result; System.out.println(“Got ” + nodes.getLength() + ” nodes”); // […]

Webdriver findElements由xpath

1)我正在做一个教程来展示findElements by xpath是如何工作的。 我想知道为什么它返回属于id=container的 元素之后的所有文本。 xpath的代码: By.xpath(“//div[@id=’container’] 2)我应该如何修改代码,以便它只返回跟随父笔记的第一个或前几个节点,例如第一个节点,如“Home”,首先是几个节点,如Home,Manual Testing和Automation Testing。 感谢您的建议和帮助! 以下是本教程的代码片段: import java.util.List; import org.junit.Test; import org.junit.Before; import org.junit.After; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class WD_findElements { @Test public void test_byxpath(){ WebDriver driver = new FirefoxDriver(); try{ driver.get(“http://www.hexbytes.com”); List elements = driver.findElements(By.xpath(“//div[@id=’container’]”)); System.out.println(“Test7 number of elements: ” + elements.size()); for(WebElement […]

如何在Groovy中创建XPath函数

我正在尝试在Groovy中创建一个执行以下操作的函数: 在运行时接受2个参数(一串XML和一个xpath查询) 以文本forms返回结果 这可能非常简单,但有两个障碍: 这必须在groovy中完成 我对Groovy或Java几乎一无所知…… 这是我通过黑客攻击各种代码而得到的,但现在我被卡住了: import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.*; builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); doc = builder.parse(new ByteArrayInputStream(xml.bytes)); expr = XPathFactory.newInstance().newXPath().compile(expression); Object result = expr.evaluate(doc, XPathConstants.NODESET) 其中“xml”和“expression”是运行时参数。 我现在如何得到这个结果(作为字符串)? 谢谢

XPath:有没有办法为查询设置默认命名空间?

有没有办法将Java的XPath设置为表达式的默认名称空间前缀? 例如,代替:/ html:html / html:head / html:title / text()“,查询可以是:/ html / head / title / text() 使用命名空间前缀时,必须有一种更优雅的方式。 我现在正在做的示例代码片段: Node node = … // DOM of a HTML document XPath xpath = XPathFactory.newInstance().newXPath(); // set to a NamespaceContext that simply returns the prefix “html” // and namespace URI “”http://www.w3.org/1999/xhtml” xpath.setNamespaceContext(new HTMLNameSpace()); String expression = “/html:html/html:head/html:title/text()”; String […]

加速xpath

我有一个1000条目文档的格式是这样的 这里有超过1000个Entry节点。 我正在编写一个Java程序,它基本上逐个获取所有节点并对每个节点进行一些分析。 但问题是节点的检索时间随着它的增加而增加。 例如,检索第一个节点100毫秒以检索第二个节点需要78毫秒,并且它继续增加。 要检索999节点,它需要超过5秒。 这非常慢。 我们将此代码插入到包含超过1000个条目的XML文件中。 有些像数百万。 解析整个文档的总时间超过5分钟。 我正在使用这个简单的代码来遍历它。 这里nxp是我自己的类,它有从xpath获取节点的所有方法。 nxp.fromXpathToNode(“/Example/Entry” + “[” + i + “]”, doc); 和doc是该文件的文档。 i是要检索的节点。 当我尝试这样的事情时 List nl = nxp.fromXpathToNodes(“/Example/Entry”,doc); content = nl.get(i); 我面临同样的问题。 任何人都有任何关于如何加速节点tretirival的解决方案,因此从XML文件获取第一个节点和1000个节点需要相同的时间。 谢谢 这是xpathtonode的代码。 public Node fromXpathToNode(String expression, Node context) { try { return (Node)this.getCachedExpression(expression).evaluate(context, XPathConstants.NODE); } catch (Exception cause) { throw new RuntimeException(cause); } […]

javax.xml,XPath不是从带有名称空间的XML中提取的

有“原始”XML 555 172799999 555 carbon 以这种方式解析XML // javax.xml.parsers.* DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(pathToXml); 然后我试图通过XPath提取会话ID // javax.xml.xpath.*; XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); // next xpath does not work with Java and online xpath tester //XPathExpression expr = xpath.compile(“/soap:Envelope/soap:Header/context/session/text()”); // this xpath works with online xpath tester […]

在JAVA中使用XPath解析具有不同命名空间的xml

我正在做这个小项目,我的任务是读取一个xml文件并解析它,以便它可以存储在一个类中。 这是xml示例。 它是用SOAP编写的,我想做的就是得到 这部分解析了子节点,以便我可以创建一个具有’nodeName’作为属性的类,其值为’getNewTokenResponse’。 +会话密钥 {{session.key}} 但我真正的问题是,我发现很多很好的示例代码,名称空间没有前缀,xml文件的结构可能会有所不同。 所以在这里我很困惑地完成任务。 我会感激任何建议。 干杯:d