Tag: xpath

XPath到第一次出现的文本长度> = 200个字符的元素

如何获得具有200个或更多字符长度的内部文本(纯文本,丢弃其他子项)的第一个元素? 我正在尝试创建一个像Embed.ly这样的HTML解析器,我已经建立了一个回退系统,我首先检查og:description ,然后我会搜索这个事件,然后才搜索description元标记。 这是因为大多数甚至包含meta description描述的网站都会在该标记中描述其网站,而不是当前页面的内容。 例: some characters 200 characters some more stuff 我可以使用什么选择器来获取该HTML片段的200个字符部分? 我不想要更多的东西 ,我不关心它是什么元素(除了或 ),只要它是第一个包含至少200个字符的纯文本。 XPath查询应该是什么样的?

从c#/ xpath获取属性值

我有一个app.config文件,需要获取属性的值: Liquid XML Studio提供以下xml: /configuration/log4net/appender/param[1] 但是,C#代码可以使用xpath来获取值?

使用带reflection的XPath样式查询

我有一个类树,它包含层次结构中的多个对象。 所以我可能有一个Container对象,它承载3个SubContainer对象,这些对象又承载任意数量的Item对象。 有没有什么办法可以在这个对象树上使用XPath样式的表达式,这意味着reflection,这样我就可以使用XPath样式的表达式查询类的属性,这样代码看起来像: object o = Container.Query(“/Container/SubContainer[1]/Item[1]/@ItemProperty”); 显然这完全弥补了,并且可能不是有效的XPath语法,但它只是为了让您了解我正在寻找什么。 编辑 – >我想以这种方式查询的原因是因为对象的路径不是固定的,因此需要由应用程序用户配置。 谢谢。

使用C#在XML文档中查找特定值的好方法是什么?

我正在调用Oracle公开的WebService,它接受ItemID的输入并返回相应的Item Number。 我想获取已从响应中包含的XML返回的Item Number。 XML看起来像这样: 1010603 我只想抓取1010603特别是只抓取1010603。 我没有做过很多使用C#解析XML的工作,到目前为止我正在使用一些不同的方法。 建议的方法是什么? 我在VS2008上(所以XPath可用等)

SelectSingleNode总是返回null?

以这个简化的XML示例为例: Invalid Login 我试图使用SelectSingleNode方法选择’错误’节点,但是使用以下代码它总是返回NULL? XmlNode errorNode = oss.SelectSingleNode(“/message/error”); if (errorNode != null) Console.Writeline(“There is an error”); 从研究我已经做到这与命名空间有关,但我根本无法得到任何工作。 任何建议?

使用HTMLAgilityPack仅提取页面文本

好的,我对HTMLAgilityPack中使用的XPath查询真的很陌生。 所以我们可以考虑这个页面http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you 。 我想要的只是提取页面内容而不是其他内容。 所以我首先删除脚本和样式标签。 Document = new HtmlDocument(); Document.LoadHtml(page); TempString = new StringBuilder(); foreach (HtmlNode style in Document.DocumentNode.Descendants(“style”).ToArray()) { style.Remove(); } foreach (HtmlNode script in Document.DocumentNode.Descendants(“script”).ToArray()) { script.Remove(); } 之后,我尝试使用// text()来获取所有文本节点。 foreach (HtmlTextNode node in Document.DocumentNode.SelectNodes(“//text()”)) { TempString.AppendLine(node.InnerText); } 然而,不仅我不仅仅获得文本我也获得了无数/ r / n字符。 请在这方面我需要一些指导。

在C#中实现我自己的XPathNavigator

我正在寻找从Microsoft的XPathNavigator类派生的类的C#示例实现。 任何人都可以指出我这样的文章吗? 正如您可能(或可能不知道)所知,XmlNavigator旨在允许在大多数数据模型上叠加XPath导航。 我已经实现了我的派生XPathNavigator类,它运行得很好。 很好,除了递归搜索的XPath表达式,即“// *”。 我很确定我在Clone,MoveToFirstChild或MoveTo overides中有一个微妙的错误,我认为如果存在另一个例子,我可能会有所帮助。 另外,我确信我已经看过杂志文章,讨论这个问题。 事实certificate我的搜索没有任何结果。 也许有人记得这样的文章。

使用XPath查询从匹配的XML节点获取属性值

这似乎不应该是困难的,但我现在卡住了。 我正在尝试从与给定XPath查询字符串匹配的节点获取特定属性的属性值。 这是我到目前为止所拥有的: public static IEnumerable GetAttributes(this XmlDocument xml, string xpathQuery, string attributeName) { var doc = new XPathDocument(new XmlNodeReader(xml)); XPathNavigator nav = doc.CreateNavigator(); XPathExpression expr = nav.Compile(xpathQuery); XPathNodeIterator iterator = nav.Select(expr); while (iterator.MoveNext()) { XPathNavigator curNav = iterator.Current; if (curNav.HasAttributes) { XmlNode curNode = ((IHasXmlNode)curNav).GetNode(); if (null != curNode) { XmlAttribute attrib = curNode.Attributes[attributeName]; […]

在SelectSingleNode中使用XPath:从XML中检索单个元素(如果存在)

我的XML看起来像: one two three …..maybe more Items here. 某些个别物品可能存在也可能不存在。 假设我想要检索元素 two 如果它存在)。 我尝试了以下XPath(在C#中)。 XMLNode node = myXMLdoc.SelectSingleNode(“/itemSet[Item=’two’]”) —如果第2项存在,那么它只返回第一个第一个元素。 也许这个查询只指向itemSet中的第一个元素,如果它在某个地方有一个值为2的Item作为子元素。 这种解释是否正确? 所以我尝试过: XMLNode node = myXMLdoc.SelectSingleNode(“/itemSet[Item=’two’]/Item[1]”) —我读了这个查询,返回itemSet中第一个具有value =’two’的元素。 我对么? 这仍然只返回第一个元素。 我究竟做错了什么? 在这两种情况下,使用兄弟姐妹我可以遍历子节点并获得两个 ,但这不是我正在看的。 如果两个不存在,则SelectSingleNode返回null。 因此,我获得一个成功的返回节点的事实确实表明存在元素二,所以如果我想要一个布尔测试chk存在两个 ,任何上述XPath就足够了,但实际上我需要完整的元素two作为我的返回节点。 [我的第一个问题,也是我第一次使用网络编程,所以我刚刚从过去的SO问题中学到了上面的XPath和相关的xml内容。 所以请保持温和,让我知道如果我是一个doofus或蔑视任何社区规则。 谢谢。]

使用XPATH访问XML元素(是:学习xpath的好教程)

我正在努力学习XPath。 这个理论似乎非常简单,除了它不起作用的事实。 我试图获得每个目标元素的内容 XPathDocument doc = new XPathDocument(sPath); XPathNavigator nav = doc.CreateNavigator(); XPathExpression expr; expr = nav.Compile(“/doc/file/body/trans-unit/target”); XPathNodeIterator iterator = nav.Select(expr); while (iterator.MoveNext()) { XPathNavigator nav2 = iterator.Current.Clone(); sbDoc.Append(nav2.InnerXml); } XML文档如下所示: Your Program Details Your Program Details Status Status 这几乎是从一个教程中逐字逐句,但我无法让它工作。 创建迭代器时,在调试模式下,我可以看到文档已加载,但迭代器没有找到结果并跳过While循环。 我可能正在做一些非常愚蠢的事情,但是什么呢? 谁知道我在哪里可以找到一个好的,可靠的XPATH教程? 谢谢大家。 事实certificate我忽略了这样一个事实:有一个名称空间(我在删除它的同时简化了XML代码,因为我没有意识到它很重要),并且通过添加名称空间管理器,代码运行正常。 我现在正在研究提出的XPATH教程,它们看起来很好。