Tag: xpath

没有使用XPath从Atom XML文档中选择节点?

我正在尝试以编程方式解析Atom提要。 我将primefacesXML下载为字符串。 我可以将XML加载到XmlDocument 。 但是,我无法使用XPath遍历文档。 每当我尝试时,我都会null 。 我一直在使用这个Atom提要作为测试: http : //steve-yegge.blogspot.com/feeds/posts/default 调用SelectSingleNode()始终返回null ,除非我使用“ / ”。 这就是我现在正在尝试的: using (WebClient wc = new WebClient()) { string xml = wc.DownloadString(“http://steve-yegge.blogspot.com/feeds/posts/default”); XmlNamespaceManager nsMngr = new XmlNamespaceManager(new NameTable()); nsMngr.AddNamespace(string.Empty, “http://www.w3.org/2005/Atom”); nsMngr.AddNamespace(“app”, “http://purl.org/atom/app#”); XmlDocument atom = new XmlDocument(); atom.LoadXml(xml); XmlNode node = atom.SelectSingleNode(“//entry/link/app:edited”, nsMngr); } 我以为它可能是因为我的XPath,所以我也尝试了一个简单的根节点查询,因为我知道root应该工作: // I’ve tried both with […]

c#中不区分大小写的XML解析器

你用XML做的每件事都是区分大小写的,我知道。 但是,现在我发现自己处于一种情况,如果我以某种方式使xml名称/属性识别不敏感,我正在编写的软件会产生更少的错误。 不区分大小写的XPath将是一个神派。 在c#中有一个简单的方法/库吗?

从csproj文件中读取引用列表

有没有人知道以编程方式读取VS2008 csproj文件中的引用列表的方法? MSBuild似乎不支持此function。 我试图通过将csproj文件加载到XmlDocument来读取节点,但XPath搜索不返回任何节点。 我正在使用以下代码: System.Xml.XmlDocument projDefinition = new System.Xml.XmlDocument(); projDefinition.Load(fullProjectPath); System.Xml.XPath.XPathNavigator navigator = projDefinition.CreateNavigator(); System.Xml.XPath.XPathNodeIterator iterator = navigator.Select(@”/Project/ItemGroup”); while (iterator.MoveNext()) { Console.WriteLine(iterator.Current.Name); } 如果我可以获取ItemGroups列表,我可以确定它是否包含参考信息。

XDocument,XPath和命名空间的奇怪之处

我有一个XML文档,如下所示: 尽管指定了命名空间,但它没有任何可用的模式(我从外部源获取此类,因此无法控制)。 我正在使用XDocument解析它,但继续为不在env命名空间中的项获取空值。 我正在设置这样的XDocument: XDocument Source = XDocument.Load(“Testfile.xml”); XmlNamespaceManager oManager = new XmlNamespaceManager(new NameTable()); oManager.AddNamespace(String.Empty, “http://xml.kerridge.net/k8msg”); oManager.AddNamespace(“env”, “http://xml.kerridge.net/k8msgEnvelope”); 然后我尝试获取值: ?Source.XPathSelectElement(“// kmsg”,oManager) 空值 ?Source.XPathSelectElement(“// header”,oManager) 空值 ?Source.XPathSelectElement(“// env:source”,oManager) 正确获取节点 我假设这与我设置命名空间管理器错误有关,但我无法弄清楚如何解决它。 任何帮助都会很棒。 谢谢

如何选择使用默认命名空间的节点?

XML文件的结构或多或少如下: 我的目标是选择所有“c”元素,但以下xpath表达式将不起作用:“// a / b / c”。 即: XmlDocument doc= new XmlDocument(); doc.Load(filepath); XmlNodeList l = doc.SelectNodes(“//a/b/c”); // 0 nodes 我测试的唯一xpath表达式是/ *(1个节点)和// *(所有节点)。 此问题与XML命名空间有关吗? 如果是这样,设置XMLDocument对象的正确方法是什么? XmlDocument doc= new XmlDocument(); doc.Load(filepath); XmlNamespaceManager m = new XmlNamespaceManager(doc.NameTable); m.AddNamespace(/* what goes here? */); XmlNodeList l = doc.SelectNodes(“//a/b/c”, m);

如何使normalize-space()xpath函数起作用?

我目前正在尝试以下xpath //tr[normalize-space(td/text())=’User Name’] 获取包含’User Name’或’User Name’或’ User Name ‘但不起作用的td的所有tr,我不知道查询有什么问题:( 我想要找到的数据采用以下格式 User Name User Name User Name 那么编写这个xpath查询的正确格式是什么? 编辑:如果数据采用以下格式,则似乎无效 xUser Name xyUser Name xyz User Name 那么现在我怎样才能编写xpath查询? 注意:“// tr [normalize-space(td / text())=’用户名’]”不会工作 但是“// tr / td [normalize-space(text())=’用户名’]”将起作用(但我想得到tr而不是td元素)

基于DateTime属性C#,XPath对XML节点进行排序

我有一个看起来像这样的XML结构。 … 我试图找到一种方法来根据sTime属性SORT节点,这是一个DateTime.ToString()值。 诀窍是我需要保持节点的机智,由于某种原因,我找不到办法做到这一点。 我很确定LINQ和XPath有办法做到这一点,但我被卡住了,因为我似乎无法根据DateTime.ToString()值进行排序。 XPathDocument saleResults = new XPathDocument(@”temp/salesData.xml”); XPathNavigator navigator = saleResults.CreateNavigator(); XPathExpression selectExpression = navigator.Compile(“sales/item/@sTime”); selectExpression.AddSort(“@sTime”, XmlSortOrder.Descending, XmlCaseOrder.None, “”, XmlDataType.Number); XPathNodeIterator nodeIterator = navigator.Select(selectExpression); while( nodeIterator.MoveNext() ) { string checkMe = nodeIterator.Current.Value; } 我还需要维护一个指向NODE的指针来检索其他属性的值。 也许这并不像我想的那么简单。 谢谢。 解决方案 :这是我最终使用的内容。 获取所选答案和IComparable类,这就是我如何根据sTime属性对XML节点进行排序,然后将所有属性放入相应的Arrays中以便稍后使用。 XPathDocument saleResults = new XPathDocument(@”temp/salesData.xml”); XPathNavigator navigator = saleResults.CreateNavigator(); XPathExpression selectExpression = navigator.Compile(“sales/item”); […]

提供了XmlNamespaceManager,但仍然需要“Namespace Manager或XsltContext”

我正在尝试阅读以下内容并在其中选择一个节点 。 XmlDocument document = new XmlDocument(); document.Load(Server.MapPath(“order.xml”)); XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable); manager.AddNamespace(“ns1”, “http://xxxxxx Some URL XXXX”); query = “/ns1:OrderInfo/pricing”; XmlNodeList nodeList = document.SelectNodes(query); 但它总是给“需要命名空间管理器或XsltContext” 正如你在上面看到的那样,我使用XmlNamespaceManager添加命名空间,但仍然提供错误请任何帮助

获取xpath函数的问题end-with()工作,而contains()工作正常

我正在尝试获取具有以某个id结尾的属性的标记。 喜欢 我希望得到id以“Country”结尾的跨度 我尝试以下xpath //span[ends-with(@id,’Country’)]但我得到以下exception “需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。” 奇怪的是,包含的工作正常,所以下面的xpath工作//span[contains(@id,’Country’)] 任何想法为什么会这样? 谢谢

XPath和* .csproj

我肯定错过了一些重要的细节。 我只是不能使.NET的XPath与Visual Studio项目文件一起工作。 我们加载一个xml文档: var doc = new XmlDocument(); doc.Load(“blah/blah.csproj”); 现在执行我的查询: var nodes = doc.SelectNodes(“//ItemGroup”); Console.WriteLine(nodes.Count); // whoops, zero 当然,文件中有名为ItemGroup的节点。 此外,此查询有效: var nodes = doc.SelectNodes(“//*/@Include”); Console.WriteLine(nodes.Count); // found some 使用其他文档,XPath工作得很好。 我对此完全感到困惑。 谁能解释一下发生了什么事?