我正在创建一个Atom提要,当我在下面尝试添加xmlns:i属性时 -
$node->addAttribute("xmlns:i","http://www.w3.org/2001/XMLSchema-instance");
Run Code Online (Sandbox Code Playgroud)
我把它作为输出 -
i="http://www.w3.org/2001/XMLSchema-instance"
Run Code Online (Sandbox Code Playgroud)
"xmlns:"部分被切断了.我是否需要逃避:字符?或者他们是否有其他方式来添加此命名空间?
我想要一个这样的页面:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:m="mine.xsd">
<m:dialog m:title="Hello">Hi there!</m:dialog>
</html>
Run Code Online (Sandbox Code Playgroud)
我怎么写"mine.xsd"?
使用T-SQL查询数据时,如何删除/忽略xml文件中的XML命名空间?
我正在将一个xml文件加载到一个变量中,它工作得很好.但是xml有一个名称空间集,除非我删除它,否则我的查询会变空.
T-SQL:
DECLARE @xml xml
SELECT @xml = BulkColumn FROM OPENROWSET(BULK 'C:\myfile.xml', SINGLE_BLOB) AS A
SELECT X.z.value('ID[1]', 'VARCHAR(3)') FROM @xml.nodes('myroot/element') AS X(z)
Run Code Online (Sandbox Code Playgroud)
XML示例:
<?xml version="1.0" encoding="utf-8"?>
<myroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<element>
<ID>1</ID>
</element>
<element>
<ID>2</ID>
</element>
<element>
<ID>3</ID>
</element>
</myroot>
Run Code Online (Sandbox Code Playgroud)
这有效,查询返回:
1
2
3
但XML还包含一个默认命名空间:
<myroot xmlns="http://XXX" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Run Code Online (Sandbox Code Playgroud)
在xmlns="http://XXX"完全搞砸了我的查询.不幸的是,在加载之前手动修改xml并不是一个真正的选择.
问题:
我在XStream的帮助下将对象序列化为XML.如何告诉XStream将xmlns插入到对象的XML输出中?
作为一个例子,我有这个我要序列化的简单对象:
@XStreamAlias(value="domain")
public class Domain
{
@XStreamAsAttribute
private String type;
private String os;
(...)
}
Run Code Online (Sandbox Code Playgroud)
如何使用XStream 完全实现以下输出?
<domain type="kvm" xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
<os>linux</os>
</domain>
Run Code Online (Sandbox Code Playgroud) 在我的C#代码库中,我有一个XDocument表单:
<A>
<B>
<C xmlns='blabla' yz='blablaaa'> Hi </C>
<D xmlns='blabla' yz='blablaaa'> How </D>
<E xmlns='blabla' yz='blablaaa'> Are </E>
<F xmlns='blabla' yz='blablaaa'> You </F>
</B>
<B>
<C xmlns='blabla' yz='blablaaa'> I </C>
<D xmlns='blabla' yz='blablaaa'> am</D>
<E xmlns='blabla' yz='blablaaa'> fine</E>
<F xmlns='blabla' yz='blablaaa'> thanks</F>
</B>
Run Code Online (Sandbox Code Playgroud)
使用Linq-to-XML或其他方式,我想删除xmlns元素B包含的所有元素.
使用此处给出的方法:如何删除XMLDocument中的特定属性?,我能够删除所有属性,除了 xmlns
从中删除'xmlns'属性的最佳方法是什么XDocument?
我正在尝试使用模块xml2js将node.js中的XML转换为JSON.访问变量时如何处理命名空间别名?
以下代码转换我的文件(sampleWithNamespaces.xml)
var fs = require('fs'),
xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile('sampleWithNamespaces.xml', function (err, data) {
parser.parseString(data, function (err, result) {
console.dir(result);
console.log('Done');
});
});
Run Code Online (Sandbox Code Playgroud)
sampleWithNamespaces.xml:
<d:student xmlns:d='http://www.develop.com/student'>
<d:id>3235329</d:id>
<d:name>Jeff Smith</d:name>
<d:language>JavaScript</d:language>
<d:rating>9.5</d:rating>
</d:student>
Run Code Online (Sandbox Code Playgroud)
输出:
$ node xml2jsTest.js
{ '@': { 'xmlns:d': 'http://www.develop.com/student' },
'd:id': '3235329',
'd:name': 'Jeff Smith',
'd:language': 'JavaScript',
'd:rating': '9.5' }
Done
Run Code Online (Sandbox Code Playgroud)
我可以使用符号result['d:name']来访问'name'属性,而不是result.name如果我没有命名空间别名.我想我的问题是,我这样做是正确的吗?
我读过 "如果一个元素有一个名称空间别名,别名和元素是用"$"连接的.例如,ns:元素变为ns $元素"如果我这样做,我可以读取属性为result.d$name.如果我走这条路,我怎么会这样做?
我在所有相同的模式/结构之后获得了数千个XML文件.我实现了IXmlSerializable,因此我自己阅读元素和属性.
我的问题是这些文件都使用不同的虚假命名空间.这些文件来自另一个来源,所以我无法改变它:D另外,对于我来说,有太多这些命名空间只是构建一个可能的命名空间数组并将其传递给xmlserializer.
现在,如果我没有指定命名空间,它会抛出[xmlns:ns0 ="http://tempuri.org/abcd.xsd"不是预期的]错误.
我希望能够告诉序列化程序在反序列化我的对象时只是忽略命名空间并且只需触发ReadXML.或者只是能够告诉它接受任何"http://tempuri.org/"命名空间.
那可能吗?
我想尽量避免修改文件.
谢谢!
我有一个包含两个项目的解决方案:名为"MyTest.TestApplication"的WPF应用程序和名为"MyTest.ClassLibrary"的类库,以及相应的默认名称空间.MyTest.TestApplication引用了MyTest.ClassLibrary.MyTest.ClassLibrary包含一个名为MyTest.ClassLibrary.TestClass的类.我想将此类的实例添加到应用程序的资源中,但使用URL作为Xml命名空间值.
所以,我打开MyTest.ClassLibrary.AssemblyInfo.cs,添加一个
using System.Windows.Markup
Run Code Online (Sandbox Code Playgroud)
指令,然后在最后我添加行
[assembly: XmlnsDefinition("http://schemas.test.com/test", "MyTest.ClassLibrary")]
Run Code Online (Sandbox Code Playgroud)
我构建项目,转到MyTest.TestApplication.App.Xaml,然后向Application元素添加名称空间定义.一旦我输入xmlns:t =",我就会得到一个intellisense的程序集名称和uris列表,但不是http://schemas.test.com/test.如果我还是添加命名空间定义,就像这样:
xmlns:t="http://schemas.test.com/test"
Run Code Online (Sandbox Code Playgroud)
并将以下内容添加到Resources元素:
<t:TestClass x:Key="myTest" />
Run Code Online (Sandbox Code Playgroud)
然后该资源没有被创建,并且Xaml编辑器抱怨名称空间http://schemas.test.com/test中不存在类TestClass .
令人沮丧的是,我添加了一个名为WpfCustomControlLibrary1的默认WPF自定义控件库,添加了该行
[assembly: XmlnsDefinition("bluh", "WpfCustomControlLibrary1")]
Run Code Online (Sandbox Code Playgroud)
到WpfCustomControlLibrary1.AssemblyInfo.cs,构建项目,在MyTest.TestApplication中引用它,并且一旦我开始输入xmlns:b ="在App.xam中,intellisense会在顶部显示名称为"bluh"的命名空间列表.
我尝试添加各种程序集和使用指令到MyTest.ClassLibrary,但我不能让Visual Studio通过架构URL找到我的程序集.令人惊讶的是,如果我将命名空间设置为程序集名称,它确实有效,如下所示:
xmlns:t="clr-namespace:MyTest.ClassLibrary;assembly=MyTest.ClassLibrary"
Run Code Online (Sandbox Code Playgroud)
那么......这里发生了什么?
编辑:令人沮丧的是,我通过简单地从WPF应用程序中删除引用,然后重新添加它,经过两个小时的搜索后终于开始工作了.啊.我猜这是某种VS2012错误?
Python的内置xml.etree包支持使用命名空间解析XML文件,但是命名空间前缀扩展到括在括号中的完整URI.所以在官方文档中的示例文件中:
<actors xmlns:fictional="http://characters.example.com"
xmlns="http://people.example.com">
<actor>
<name>John Cleese</name>
<fictional:character>Lancelot</fictional:character>
<fictional:character>Archie Leach</fictional:character>
</actor>
...
Run Code Online (Sandbox Code Playgroud)
该actor标签被扩大到{http://people.example.com}actor和fictional:character到{http://characters.example.com}character.
我可以看到这是如何使一切非常明确并减少歧义(文件可以具有相同的命名空间,具有不同的前缀等)但是使用起来非常麻烦.该Element.find()方法和其他方法允许将dict映射前缀传递给名称空间URI,所以我仍然可以做element.find('fictional:character', nsmap)但据我所知,标记属性没有任何类似之处.这导致了令人讨厌的东西element.attrib['{{{}}}attrname'.format(nsmap['prefix'])].
流行的lxml包提供了相同的API和一些扩展,其中一个扩展是nsmap它们从文档继承的元素的属性.然而,没有一种方法似乎实际上使用它,所以我仍然必须做element.find('fictional:character', element.nsmap),这只是不必要的重复输入每次.它仍然不适用于属性.
幸运的是lxml支持子类化BaseElement,所以我只使用p(for prefix)属性创建一个具有相同API的属性,但使用元素自动使用名称空间前缀nsmap(编辑:可能最好nsmap在代码中分配自定义).所以我只是这样做,element.p.find('fictional:character')或者element.p.attrib['prefix:attrname']更少重复,我认为更具可读性.
我只是觉得我真的错过了一些东西,它真的感觉这应该真的已经是一个功能,lxml如果不是内置etree包.我在某种程度上做错了吗?
我试图解析pacs.003 ISO20022格式的xml文件.我有这个XSD,并使用XMLBeans创建了所需的Java类.我遇到的问题是我无法从XML中读取元素并继续获取NullPointerException.我搜索过类似的问题,但大多数都导致OP转向不同的技术.
我从LON_20160208.xml获得的XML片段是:
<S2SDDDnf:FIToFICstmrDrctDbt xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.003.001.02">
<GrpHdr>
<MsgId>DDA160802AASW006543</MsgId>
</GrpHdr>
</S2SDDDnf:FIToFICstmrDrctDbt>
Run Code Online (Sandbox Code Playgroud)
我的代码是:
public static void main(String[] args) {
XmlOptions xmlOptions = new XmlOptions();
xmlOptions.setUseDefaultNamespace();
xmlOptions.setSavePrettyPrint();
Document doc;
try {
doc = Document.Factory.parse(new File("data_samples/LON_20160208.xml"));
String messageId = doc.getFIToFICstmrDrctDbt().getGrpHdr().getMsgId();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
将doc.getFIToFICstmrDrctDbt()在上述结果NullPointerException异常,这似乎指向无论是get_store()在XMLBeans类中的方法或与命名空间的问题.
我已经尝试使用替换命名空间映射并打开setUseDefaultNamespace()和关闭该方法(它目前没有在上面注释掉).我也看过有关添加一个答案elementFormDefault="qualified"的xsd:schema元素,但这个已经完成.这些似乎都没有解决问题,我的想法已经不多了.
任何帮助将不胜感激.
xml-namespaces ×10
xml ×4
java ×2
.net ×1
c# ×1
elementtree ×1
javascript ×1
json ×1
linq-to-xml ×1
lxml ×1
namespaces ×1
node.js ×1
php ×1
python ×1
simplexml ×1
t-sql ×1
vb.net ×1
xaml ×1
xml-parsing ×1
xmlbeans ×1
xsd ×1
xstream ×1