C# 需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数

C# 需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数,c#,asp.net,xml,C#,Asp.net,Xml,我有以下XML <DataTable xmlns = "http://schemas.datacontract.org/2004/07/System.Data"> <xs:schema id = "NewDataSet" xmlns = "" xmlns:xs = "http://www.w3.org/2001/XMLSchema" xmlns:msdata = "urn:schemas-microsoft

我有以下XML

<DataTable xmlns = "http://schemas.datacontract.org/2004/07/System.Data">
    <xs:schema
        id = "NewDataSet"
        xmlns = ""
        xmlns:xs = "http://www.w3.org/2001/XMLSchema"
        xmlns:msdata = "urn:schemas-microsoft-com:xml-msdata">
        <xs:element
            name = "NewDataSet"
            msdata:IsDataSet = "true"
            msdata:MainDataTable = "Table"
            msdata:UseCurrentLocale = "true">
            <xs:complexType>
                <xs:choice minOccurs = "0" maxOccurs = "unbounded">
                    <xs:element name = "Table">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element
                                    name = "Id"
                                    type = "xs:int"
                                    minOccurs = "0"/>
                                <xs:element
                                    name = "Industry"
                                    type = "xs:string"
                                    minOccurs = "0"/>
                                <xs:element
                                    name = "ParentId"
                                    type = "xs:int"
                                    minOccurs = "0"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:choice>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    <diffgr:diffgram xmlns:msdata = "urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr = "urn:schemas-microsoft-com:xml-diffgram-v1">
        <NewDataSet xmlns = "">
            <Table diffgr:id = "Table1" msdata:rowOrder = "0">
                <Id>1592</Id>
                <Industry>Fortune 100</Industry>
                <ParentId>1810</ParentId>
            </Table>
            <Table diffgr:id = "Table2" msdata:rowOrder = "1">
                <Id>1601</Id>
                <Industry>Oil &amp; Gas Operations</Industry>
                <ParentId>0</ParentId>
            </Table>
             </NewDataSet>
    </diffgr:diffgram>
</DataTable>
我得到这个错误

需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数


请建议解决方案

在选择节点之前,您需要添加以下内容

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("bk", "urn:Books")
xmlnsManager.AddNamespace("pub", "urn:Publisher")

在选择节点之前,您需要添加以下内容

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("bk", "urn:Books")
xmlnsManager.AddNamespace("pub", "urn:Publisher")

对于所示示例,应为:

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema")
xmlnsManager.AddNamespace("msdata", "urn:schemas-microsoft-com:xml-msdata")

对于所示示例,应为:

XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmldoc.NameTable);
xmlnsManager.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema")
xmlnsManager.AddNamespace("msdata", "urn:schemas-microsoft-com:xml-msdata")

您还可以避免使用XmlNamespaceManager。GetElementsByTagName可以遍历该文档,但需要更多注意,您应该已经知道xmlDocument的结构:

var nodes = document.GetElementsByTagName("xsl:import");
var href =  nodes[0].Attributes["href"];//be sure which node to take

您还可以避免使用XmlNamespaceManager。GetElementsByTagName可以遍历该文档,但需要更多注意,您应该已经知道xmlDocument的结构:

var nodes = document.GetElementsByTagName("xsl:import");
var href =  nodes[0].Attributes["href"];//be sure which node to take

回答得很好!我需要获取Word文档中的第一个节点。使用一些OpenXml方法将其读入一个字符串,我称之为docText:xmldocumentxml=newxmldocument;xml.LoadXmldocText;XmlNodeList节点=xml.GetElementsByTagNamew:p;XmlNode hrefTag=节点[0];抓取节点。通过执行XmlNodeList nodest nodes=xml.GetElementsByTagNamexs:sequence;然后XmlNode parentId=节点[2]@vapcguy Happy可以帮忙:我不认为这需要它,对我来说,这似乎是一个很好的答案。。。其他人也对它投了更高的票,我也是。最初的问题似乎更多的是关于理论,而不是实际应用,但您通过链接到设计模式来涵盖这一方面。可能需要总结一下链接上的内容,以防移动。这就是我在这方面所能提供的全部改进。回答得很好!我需要获取Word文档中的第一个节点。使用一些OpenXml方法将其读入一个字符串,我称之为docText:xmldocumentxml=newxmldocument;xml.LoadXmldocText;XmlNodeList节点=xml.GetElementsByTagNamew:p;XmlNode hrefTag=节点[0];抓取节点。通过执行XmlNodeList nodest nodes=xml.GetElementsByTagNamexs:sequence;然后XmlNode parentId=节点[2]@vapcguy Happy可以帮忙:我不认为这需要它,对我来说,这似乎是一个很好的答案。。。其他人也对它投了更高的票,我也是。最初的问题似乎更多的是关于理论,而不是实际应用,但您通过链接到设计模式来涵盖这一方面。可能需要总结一下链接上的内容,以防移动。这就是我所能提供的改进。