我有以下XML: <List xmlns="http://schemas.microsoft.com/sharepoint/soap/"> <Fields> <Field> </Field> </Fields> </List> 这是从SharePoint Web服务返回的XML精简版本。 我也有以下xPath: /List/Fields/Field 当我从我的XML中删除xmlns的xPath工作正常。 当它在我的xPath找不到任何东西。 有什么我应该做不同的我的xPath? 修改XML不是一个选项。
我的目标是使用XPath从具有多个名称空间的多个xml文件中提取某些节点。 一切工作正常,只要我知道命名空间的URI。 名称空间名称本身保持不变,但Schemas(XSD)有时是客户端生成的,即我所不知道的。 那么我基本上有三个select: 只使用一个模式的命名空间,希望没有出错(我可以肯定?) 得到文档的子节点,并寻找具有名称空间URI的第一个节点,希望在那里使用URI,希望它是正确的。 出于多种原因可能会出错 莫名其妙地告诉xpath:“看,我不在意名称空间,只是find所有与这个名字的节点,我甚至可以告诉你名字空间的名称,而不是URI”。 这是这里的问题 这不是重复许多“我的XPathexpression式不工作,因为我不知道名称空间意识”问题,如在这里或这里find。 我知道如何使用名称空间感知。 只是没有如何摆脱它。
我正在尝试学习xpath。 我查看了这里的其他contains()例子,但没有使用AND运算符。 我无法得到这个工作: //ul[@class='featureList' and contains(li, 'Model')] 上: … <ul class="featureList"> <li><b>Type:</b> Clip Fan</li><li><b>Feature:</b> Air Moved: 65 ft. Amps: 1.1 Clip: Grips any surface up to 1.63" Plug: 3 prong grounded plug on heavy duty model Usage: Garage, Workshop, Dorm, Work-out room, Deck, Office & more.</li><li><b>Speed Setting:</b> 2 speeds</li><li><b>Color:</b> Black</li><li><b>Power Consumption:</b> 62 W</li><li><b>Height:</b> 14.5"</li><li><b>Width:</b> Grill […]
注意:如果您也遇到此问题,请在Apache JIRA上加注: https://issues.apache.org/jira/browse/XALANJ-2540 我得出了一个惊人的结论: Element e = (Element) document.getElementsByTagName("SomeElementName").item(0); String result = ((Element) e).getTextContent(); 似乎是一个令人难以置信的100倍比这更快: // Accounts for 30%, can be cached XPathFactory factory = XPathFactory.newInstance(); // Negligible XPath xpath = factory.newXPath(); // Negligible XPathExpression expression = xpath.compile("//SomeElementName"); // Accounts for 70% String result = (String) expression.evaluate(document, XPathConstants.STRING); 我正在使用JVM的JAXP默认实现: org.apache.xpath.jaxp.XPathFactoryImpl org.apache.xpath.jaxp.XPathImpl 我很困惑,因为很容易看出JAXP如何优化上述XPath查询来实际执行一个简单的getElementsByTagName() 。 但似乎并没有这样做。 这个问题被限制在5-6个经常使用的XPath调用中,这些调用被API抽象和隐藏。 […]
我无法理解text()和node()之间的区别。 据我所知, text()将是苹果在这种情况下的标签<item>apple</item>之间的任何东西。 节点将是什么节点实际上,这将是项目 但后来我被分配了一些工作,要求我“select产品下所有项目的文本”,另一个问题是“select所有部门中的所有pipe理器节点” 输出如何看起来像text()而不是node() XML的片段 <produce> <item>apple</item> <item>banana</item> <item>pepper</item> </produce> <department> <phone>123-456-7891</phone> <manager>John</manager> </department> 当然,有更多的部门和更多的pipe理者,但这只是一个代码片段。 任何帮助将不胜感激!
我想获得所有的标签之间的内容,但我不知道如何做到这一点,因为urn:命名空间。 <urn:ResponseStatus version="1.0" xmlns:urn="urn:camera-org"> <urn:requestURL>/CAMERA/Streaming/status</urn:requestURL> <urn:statusCode>4</urn:statusCode> <urn:statusString>Invalid Operation</urn:statusString> <urn:id>0</urn:id> </urn:ResponseStatus> 有任何想法吗 ? 谢谢 !
XPath背后的故事和对命名空间的支持是什么? 作为规范的XPath是否在名称空间之前? 如果我有一个文档的元素已被赋予一个默认的名称空间: <foo xmlns="uri" /> 看起来好像某些XPath处理器库不会识别//foo因为命名空间,而其他的会。 我的团队考虑的选项是使用正则expression式向XPath添加一个名称空间前缀(可以通过XmlNameTable添加一个名称空间前缀),但是这看起来很脆弱,因为XPath在节点testing中是一种非常灵活的语言。 有没有适用于此的标准? 我的做法有点ha but,但似乎工作正常; 我使用search/replace来删除xmlns声明,然后应用XPath。 string readyForXpath = Regex.Replace(xmldocument, "xmlns=\".+\"", String.Empty ); 这是一个公平的方法,或有任何人解决这个不同?
有没有人知道从XPathexpression式编程创buildXML层次结构的现有手段? 例如,如果我有一个XML片段,如: <feed> <entry> <data></data> <content></content> </entry> </feed> 鉴于XPathexpression式/饲料/条目/内容/ @源我会有: <feed> <entry> <data></data> <content @source=""></content> </entry> </feed> 我意识到这是可能的使用XSLT,但由于我试图完成固定转换的dynamic性质将无法正常工作。 我在C#中工作,但如果有人使用其他语言的解决scheme,请join。 谢谢您的帮助!
我相信这是可能的,但无法弄清楚语法。 像这样的东西: xmlNode.SelectNodes("//*[count(child::*) <= 1]") 但这是不正确的。
鉴于这种简化的数据格式: <a> <b> <c>C1</c> <d>D1</d> <e>E1</e> <f>don't select this one</f> </b> <b> <c>C2</c> <d>D2</d> <e>E1</e> <g>don't select me</g> </b> <c>not this one</c> <d>nor this one</d> <e>definitely not this one</e> </a> 你会如何selectB元素的所有C , D和E ? 基本上是这样的: a/b/(c|d|e) 在我自己的情况下,导致selectC , D , E节点的查询实际上相当复杂,所以我想避免这样做: a/b/c|a/b/d|a/b/e 这可能吗?