我有以下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不是一个选项。
XML命名空间的规范解释了前缀属性的解释是由它们出现的元素决定的 。 而且, 前缀名称的名称空间名称始终没有值 。 在以下情况下,此规则如何应用于属性jid的名称空间。 <query xmlns="jabber:iq:roster"> <item jid="romeo@example.com"></item> </query> 如果名称空间和属性的声明都没有前缀,则属性jid位于名称空间jabber:iq:roster 。 <q:query xmlns:q="jabber:iq:roster"> <q:item q:jid="romeo@example.com"></q:item> </q:query> 如果两者,名称空间和属性的声明具有相同的前缀,则属性jid也具有名称空间jabber:iq:roster : <q:query xmlns:q="jabber:iq:roster"> <q:item jid="romeo@example.com"></q:item> </q:query> 但是如果命名空间是用前缀声明的,但是这个属性没有前缀,哪个名称空间是属性呢? 我会假设,属性jid 具有在父元素中声明的默认名称空间, <parent xmlns="http://example.com"> <q:query xmlns:q="jabber:iq:roster"> <q:item jid="romeo@example.com"></q:item> </q:query> </parent> 或者没有名字空间,如果没有这样的声明的话。 我得到这个权利?
elementFormDefault做什么,什么时候使用? 所以我find了elementFormDefault值的一些定义: 限定 – 元素和属性位于模式的目标名称空间中 不合格 – 元素和属性没有名称空间 所以从这个定义我会认为,如果一个架构设置为合格,那么为什么你必须在名称空间的前缀types? 你甚至有什么情况下,你会有一个不合格的事情? 我尝试了Googlesearch,但是我得到的只是一些W3C页面,这些页面非常难以理解。 这是我正在使用的文件,为什么我需要将types声明为target:TypeAssignments当我将targetNamespace声明为与xmlns:target相同? <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:target="http://www.levijackson.net/web340/ns" targetNamespace="http://www.levijackson.net/web340/ns" elementFormDefault="qualified"> <element name="assignments"> <complexType> <sequence> <element name="assignments" type="target:TypeAssignments" minOccurs="1" maxOccurs="unbounded"/> </sequence> </complexType> </element> <complexType name="TypeAssignments"> <sequence> <element name="assignment" type="target:assignmentInfo" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType> <complexType name="assignmentInfo"> <sequence> <element name="name" type="string"/> <element name="page" type="target:TypePage"/> <element name="file" type="target:TypeFile" minOccurs="0" […]
我的代码尝试从网站的RSS提要中获取数据。 它抓取的节点很好,但是当试图用冒号从一个节点获取数据时,它会崩溃,并给出错误“名称空间pipe理器或XsltContext需要,这个查询有一个前缀,variables或用户定义的函数。 代码如下所示: WebRequest request = WebRequest.Create("http://buypoe.com/external.php?type=RSS2&lastpost=true"); WebResponse response = request.GetResponse(); StringBuilder sb = new StringBuilder(""); System.IO.StreamReader rssStream = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8")); XmlDocument rssDoc = new XmlDocument(); rssDoc.Load(rssStream); XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item"); for (int i = 0; i < 5; i++) { XmlNode rssDetail; rssDetail = rssItems.Item(i).SelectSingleNode("dc:creator"); if (rssDetail != null) { user = rssDetail.InnerText; […]
当从.NET中的XmlDocument生成XML时,第一次插入一个没有关联名称空间的元素时会出现一个空的xmlns属性; 这怎么能防止? 例: XmlDocument xml = new XmlDocument(); xml.AppendChild(xml.CreateElement("root", "whatever:name-space-1.0")); xml.DocumentElement.AppendChild(xml.CreateElement("loner")); Console.WriteLine(xml.OuterXml); 输出: <root xmlns="whatever:name-space-1.0"><loner xmlns="" /></root> 期望的输出: <root xmlns="whatever:name-space-1.0"><loner /></root> 是否有适用于XmlDocument代码的解决scheme,而不是在将文档转换为使用OuterXml的string之后发生的OuterXml ? 我这样做的理由是看我是否可以使用XmlDocument生成的XML匹配特定协议的标准XML。 空白的xmlns属性可能不会破坏或混淆parsing器,但它也没有出现在我看到这个协议的任何用法。
我有下面的XML,我试图用XDocument查询: <E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> <EventID>589828</EventID> <Type>3</Type> <SubType Name="Information">0</SubType> <Level>8</Level> <TimeCreated SystemTime="2010-06-01T09:45:15.8102117Z" /> <Source Name="System.ServiceModel" /> <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" /> <Execution ProcessName="w3wp" ProcessID="5012" ThreadID="5" /> <Channel /> <Computer>TESTSERVER3A</Computer> </System> <ApplicationData> <TraceData> <DataItem> <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Information"> <TraceIdentifier>http://msdn.microsoft.com/en-GB/library/System.ServiceModel.Activation.WebHostCompilation.aspx</TraceIdentifier> <Description>Webhost compilation</Description> <AppDomain>/LM/W3SVC/257188508/Root-1-129198591101343437</AppDomain> <Source>System.ServiceModel.Activation.ServiceParser/39498779</Source> <ExtendedData xmlns="http://schemas.microsoft.com/2006/08/ServiceModel/StringTraceRecord"> <VirtualPath>/Service.svc</VirtualPath> </ExtendedData> </TraceRecord> </DataItem> </TraceData> </ApplicationData> </E2ETraceEvent> 除了手动删除名称空间时,执行以下代码将为xEl1返回null: XDocument xDoc = XDocument.Parse(CurrentString); XElement xEl1 […]
它是一个.vbproj,看起来像这样 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <ProjectGuid>15a7ee82-9020-4fda-a7fb-85a61664692d</ProjectGuid> 所有我想得到的是ProjectGuid,但它不起作用时,有一个命名空间… Dim xmlDoc As New XmlDocument() Dim filePath As String = Path.Combine(mDirectory, name + "\" + name + ".vbproj") xmlDoc.Load(filePath) Dim value As Object = xmlDoc.SelectNodes("/Project/PropertyGroup/ProjectGuid") 我能做些什么来解决这个问题?
我有这个代码: /*string theXml = @"<Response xmlns=""http://myvalue.com""><Result xmlns:a=""http://schemas.datacontract.org/2004/07/My.Namespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><a:TheBool>true</a:TheBool><a:TheId>1</a:TheId></Result></Response>";*/ string theXml = @"<Response><Result><TheBool>true</TheBool><TheId>1</TheId></Result></Response>"; XDocument xmlElements = XDocument.Parse(theXml); var elements = from data in xmlElements.Descendants("Result") select new { TheBool = (bool)data.Element("TheBool"), TheId = (int)data.Element("TheId"), }; foreach (var element in elements) { Console.WriteLine(element.TheBool); Console.WriteLine(element.TheId); } 当我使用XML的第一个值,结果是空的,而与第二个,我有很好的价值… 如何使用xmlns值使用Linq到Xml?
XPath如何处理XML名称空间? 如果我使用 /IntuitResponse/QueryResponse/Bill/Id parsing下面的XML文档,我得到0个节点。 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2016-10-14T10:48:39.109-07:00"> <QueryResponse startPosition="1" maxResults="79" totalCount="79"> <Bill domain="QBO" sparse="false"> <Id>=1</Id> </Bill> </QueryResponse> </IntuitResponse> 但是,我没有在XPath中指定名称空间(即http://schema.intuit.com/finance/v3不是path中每个标记的前缀)。 如果我没有明确地告诉XPath XPath如何知道我想要的Id ? 我想在这种情况下(因为只有一个名称空间),XPath可以完全忽略xmlns 。 但是,如果有多个命名空间,事情可能会变得丑陋。