做elementFormDefault什么,什么时候应该使用?
所以我找到了一些elementFormDefault值的定义:
qualified - 元素和属性位于架构的targetNamespace中
不合格 - 元素和属性没有命名空间
因此,根据该定义,我认为如果将模式设置为限定,那么为什么必须在类型前加上命名空间?那些你甚至有一套不合格的场景是什么?我尝试使用谷歌搜索,但我得到的只是一些非常难以理解的W3C页面.
这是我现在正在使用的文件,为什么我需要声明类型,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" maxOccurs="unbounded"/>
</sequence>
<attribute name="id" type="string" use="required"/>
</complexType>
<simpleType name="TypePage">
<restriction base="integer">
<minInclusive value="50" />
<maxInclusive value="498" /> …Run Code Online (Sandbox Code Playgroud) 在xml架构文档中,如果我同时拥有targetNamespace和没有前缀的xmlns .
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/" xmlns="http://example.com/">
Run Code Online (Sandbox Code Playgroud)
它们之间的确切区别是什么?我的理解是,如果你有一个没有前缀的xmlns,那么没有前缀的所有元素都会得到那个名称空间,并且......对于targetNamespace来说,这一点令人困惑.
我总是觉得有点难以向其他人解释:为什么存在XML命名空间?我们什么时候应该使用它们,何时不应该使用它们 在XML中使用命名空间时常见的陷阱是什么?
另外,它们如何与XML模式相关?XSD架构是否应始终与命名空间相关联?
我想出有点干,以为什么 -至少在.Net框架-这是必要使用XmlNamespaceManager,以处理命名空间(或相当笨重和详细[local-name()=...的XPath谓词/功能/等等)时执行XPath查询.我确实理解为什么命名空间是必要的或至少是有益的,但为什么它如此复杂?
为了查询简单的XML文档(没有命名空间)...
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode>
<nodeName>Some Text Here</nodeName>
</rootNode>
Run Code Online (Sandbox Code Playgroud)
...可以使用类似的东西doc.SelectSingleNode("//nodeName")(可以匹配<nodeName>Some Text Here</nodeName>)
神秘#1:我的第一个烦恼 - 如果我理解正确 - 只是添加一个命名空间引用到父/ root标记(无论是否用作子节点标记的一部分),如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns="http://someplace.org">
<nodeName>Some Text Here</nodeName>
</rootNode>
Run Code Online (Sandbox Code Playgroud)
...需要几行额外的代码来获得相同的结果:
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("ab", "http://s+omeplace.org")
Dim desiredNode As XmlNode = doc.SelectSingleNode("//ab:nodeName", nsmgr)
Run Code Online (Sandbox Code Playgroud)
...本质上是梦想一个不存在的前缀(" ab")来找到一个甚至不使用前缀的节点.这有什么意义?有什么问题(概念上)doc.SelectSingleNode("//nodeName")?
神秘#2:所以,假设你有一个使用前缀的XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns:cde="http://someplace.org" xmlns:feg="http://otherplace.net">
<cde:nodeName>Some Text Here</cde:nodeName>
<feg:nodeName>Some Other Value</feg:nodeName> …Run Code Online (Sandbox Code Playgroud) 它是一个.vbproj,看起来像这样
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>15a7ee82-9020-4fda-a7fb-85a61664692d</ProjectGuid>
Run Code Online (Sandbox Code Playgroud)
我想得到的只是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")
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
当我的XML看起来像这样(不xmlns),那么我可以很容易地用XPath查询它/workbook/sheets/sheet[1]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook>
<sheets>
<sheet name="Sheet1" sheetId="1" r:id="rId1"/>
</sheets>
</workbook>
Run Code Online (Sandbox Code Playgroud)
但是当它看起来像这样我就不能
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<sheets>
<sheet name="Sheet1" sheetId="1" r:id="rId1"/>
</sheets>
</workbook>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我有这个代码:
/*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);
}
Run Code Online (Sandbox Code Playgroud)
当我使用第一个值为xml时,结果为null,而对于第二个值,我有很好的值...
如何使用xmlns值将Linq用于Xml?
我必须解析一个如下所示的XML文档:
<?xml version="1.0" encoding="UTF-8" ?>
<m:OASISReport xmlns:m="http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd">
<m:MessagePayload>
<m:RTO>
<m:name>CAISO</m:name>
<m:REPORT_ITEM>
<m:REPORT_HEADER>
<m:SYSTEM>OASIS</m:SYSTEM>
<m:TZ>PPT</m:TZ>
<m:REPORT>AS_RESULTS</m:REPORT>
<m:MKT_TYPE>HASP</m:MKT_TYPE>
<m:UOM>MW</m:UOM>
<m:INTERVAL>ENDING</m:INTERVAL>
<m:SEC_PER_INTERVAL>3600</m:SEC_PER_INTERVAL>
</m:REPORT_HEADER>
<m:REPORT_DATA>
<m:DATA_ITEM>NS_PROC_MW</m:DATA_ITEM>
<m:RESOURCE_NAME>AS_SP26_EXP</m:RESOURCE_NAME>
<m:OPR_DATE>2010-11-17</m:OPR_DATE>
<m:INTERVAL_NUM>1</m:INTERVAL_NUM>
<m:VALUE>0</m:VALUE>
</m:REPORT_DATA>
Run Code Online (Sandbox Code Playgroud)
问题是名称空间"http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd"有时可能会有所不同.我想完全忽略它,只是从标记MessagePayload下游获取我的数据.
我到目前为止使用的代码是:
String[] namespaces = new String[1];
String[] namespaceAliases = new String[1];
namespaceAliases[0] = "ns0";
namespaces[0] = "http://oasissta.caiso.com/mrtu-oasis/xsd/OASISReport.xsd";
File inputFile = new File(inputFileName);
Map namespaceURIs = new HashMap();
// This query will return all of the ASR records.
String xPathExpression = "/ns0:OASISReport
/ns0:MessagePayload
/ns0:RTO
/ns0:REPORT_ITEM
/ns0:REPORT_DATA";
xPathExpression += "|/ns0:OASISReport
/ns0:MessagePayload …Run Code Online (Sandbox Code Playgroud) 由于这个错误,我试图SelectNode从XmlDocument课堂打电话和麻烦:
需要命名空间管理器或XsltContext.此查询具有前缀,变量或用户定义的函数.
我的代码:
public void Add(ref XmlDocument xmlFormat, String strName)
{
XmlDocument dom;
XSLTemplate xsl = null;
String strPath = "";
XmlNodeList nl;
XmlAttribute na;
int n;
nl = (XmlNodeList)xmlFormat.SelectNodes("//xsl:import/@href",nsm);
}
Run Code Online (Sandbox Code Playgroud)
和xsl:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="stylesheets/r_adresetiket.xsl" />
<xsl:template match="/">
<xsl:call-template name="retouradres">
<xsl:with-param name="_retouradres" select="data/adresetiket/_retouradres" />
<xsl:with-param name="minofdir" select="data/adresetiket/afzendgegevens/afzendgegevens" />
<xsl:with-param name="checked" select="data/adresetiket/LB" />
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud) xml-namespaces ×10
xml ×7
xpath ×4
xsd ×3
c# ×2
namespaces ×2
schema ×2
.net ×1
java ×1
linq-to-xml ×1
n-triples ×1
prefix ×1
rdf ×1
vb.net ×1
xmldocument ×1