我有以下XML:
<person xmlns:a="http://example.com" xmlns:b="http://sample.net">
<a:fName>John</a:fName>
<a:lName>Wayne</a:lName>
<b:age>37</b:age>
</person>
Run Code Online (Sandbox Code Playgroud)
如何在类上定义XML序列化属性以支持所描述的场景?
我试图理解对非限定属性命名空间的"XML 1.0(第三版)中的命名空间"定义的正确解释.
"未加前缀的属性名称的命名空间名称始终没有值."
后来在同一部分:
"默认名称空间声明中的属性值可能为空.在声明范围内,没有默认名称空间,这具有相同的效果."
因此,如果我想为元素(及其子元素)声明默认命名空间,是否还必须为驻留在该命名空间内的任何属性声明前缀命名空间映射?
例如,在此示例中
<parent xmlns="http://example.com/foo">
<child attrib="value">text</child>
<parent>
Run Code Online (Sandbox Code Playgroud)
我会解释上面的定义,说明名称attrib空是空的.
所以,如果我需要attrib具有相同的命名空间parent,那么我将被迫这样做?
<foo:parent xmlns:foo="http://example.com/foo">
<foo:child foo:attrib="value">text</foo:child>
<foo:parent>
Run Code Online (Sandbox Code Playgroud)
或这个?
<parent xmlns="http://example.com/foo" xmlns:foo="http://example.com/foo">
<child foo:attrib="value">text</child>
<parent>
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很愚蠢,因为它似乎打败了默认命名空间的目的.我希望我只是误解了规范.
我正在尝试解析OpenOffice ODS电子表格中的内容.ods格式本质上只是一个包含许多文档的zipfile.电子表格的内容存储在'content.xml'中.
import zipfile
from lxml import etree
zf = zipfile.ZipFile('spreadsheet.ods')
root = etree.parse(zf.open('content.xml'))
Run Code Online (Sandbox Code Playgroud)
电子表格的内容位于单元格中:
table = root.find('.//{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table')
Run Code Online (Sandbox Code Playgroud)
我们也可以直接寻找行:
rows = root.findall('.//{urn:oasis:names:tc:opendocument:xmlns:table:1.0}table-row')
Run Code Online (Sandbox Code Playgroud)
各个元素知道命名空间:
>>> table.nsmap['table']
'urn:oasis:names:tc:opendocument:xmlns:table:1.0'
Run Code Online (Sandbox Code Playgroud)
如何在find/findall中直接使用命名空间?
显而易见的解决方案不起作用.
试图从表中获取行:
>>> root.findall('.//table:table')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lxml.etree.pyx", line 1792, in lxml.etree._ElementTree.findall (src/lxml/lxml.etree.c:41770)
File "lxml.etree.pyx", line 1297, in lxml.etree._Element.findall (src/lxml/lxml.etree.c:37027)
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 225, in findall
return list(iterfind(elem, path))
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 200, in iterfind
selector = _build_path_iterator(path)
File "/usr/lib/python2.6/dist-packages/lxml/_elementpath.py", line 184, in _build_path_iterator …Run Code Online (Sandbox Code Playgroud) XPath如何处理XML命名空间?
如果我使用
/IntuitResponse/QueryResponse/Bill/Id
Run Code Online (Sandbox Code Playgroud)
要解析下面的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>
Run Code Online (Sandbox Code Playgroud)
但是,我没有在XPath中指定命名空间(即http://schema.intuit.com/finance/v3不是路径的每个标记的前缀).Id如果我没有明确告诉它,XPath怎么知道我想要哪个?我想在这种情况下(因为只有一个命名空间)XPath可以xmlns完全忽略它.但如果有多个名称空间,事情可能会变得丑陋.
"空"是XML命名空间的有效值吗?如果是的话是什么意思?
我有以下XML代码,但我不确定属于哪个命名空间Field1和Field2元素.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header />
<soap:Body>
<Root xmlns="uri">
<Field1 xmlns="">147079737</Field1>
<Field2 xmlns="">POL</Field2>
</Root>
</soap:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud) 我正在使用Nokogiri :: XML来解析来自Amazon SimpleDB的响应.响应类似于:
<SelectResponse xmlns="http://sdb.amazonaws.com/doc/2007-11-07/">
<SelectResult>
<Item>
<Attribute><Name>Foo</Name><Value>42</Value></Attribute>
<Attribute><Name>Bar</Name><Value>XYZ</Value></Attribute>
</Item>
</SelectResult>
</SelectResponse>
Run Code Online (Sandbox Code Playgroud)
如果我直接将响应交给Nokogiri,则所有XPath查询(例如doc/"//Item/Attribute[Name='Foo']/Value")都会返回一个空数组.但是如果我xmlns从SelectResponse标签中删除属性,它就能完美运行.
是否需要做一些额外的事情来解释名称空间声明?这种解决方法感觉非常像黑客.
什么是local:在XAML中,可以调用C#类中的哪些参数local:?
在我看到的一些代码中,我看到了xmlns:local="clr-namespace:AskLocal".这是什么意思?
xmlns拥有https协议的URI 更好吗?
例如,这是手册的推荐方式:
<http xmlns="http://www.springframework.org/schema/security"/>
Run Code Online (Sandbox Code Playgroud)
使用这种方式是合法的还是更好的?
<http xmlns="https://www.springframework.org/schema/security"/>
Run Code Online (Sandbox Code Playgroud)
xmlnsURI 定义的地址的XML解析器?xsi:schemaLocation属性下载模式?假设以下XML文档:
<root xmlns:foo="...">
<foo:parent>
<child/>
</foo:parent>
</root>
Run Code Online (Sandbox Code Playgroud)
不child元素属于对应于前缀命名空间foo?就像万一<foo:child/>?
我有150 MB(有时甚至更多)XML文件.我需要删除所有名称空间.它在Visual Basic 6.0上,所以我使用DOM来加载XML.加载是可以的,我一开始对此持怀疑态度,但不知何故,这部分工作正常.
我正在尝试以下XSLT,但它也删除了所有其他属性.我想保留所有属性和元素,我只需要删除命名空间.显然这是因为我有xsl:element但没有属性.我如何在那里包含属性?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8" />
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud) xml-namespaces ×10
xml ×8
xpath ×2
.net ×1
elementtree ×1
lxml ×1
namespaces ×1
nokogiri ×1
python ×1
ruby ×1
schema ×1
uri ×1
wpf ×1
xaml ×1
xml-parsing ×1
xslt ×1