标签: xml-namespaces

Python:在lxml中添加名称空间

我正在尝试使用类似于此示例的lxml指定命名空间(取自此处):

<TreeInventory xsi:noNamespaceSchemaLocation="Trees.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</TreeInventory>
Run Code Online (Sandbox Code Playgroud)

我不确定如何添加要使用的Schema实例以及Schema位置.该文件让我开始,这样做是这样的:

>>> NS = 'http://www.w3.org/2001/XMLSchema-instance'
>>> TREE = '{%s}' % NS
>>> NSMAP = {None: NS}
>>> tree = etree.Element(TREE + 'TreeInventory', nsmap=NSMAP)
>>> etree.tostring(tree, pretty_print=True)
'<TreeInventory xmlns="http://www.w3.org/2001/XMLSchema-instance"/>\n'
Run Code Online (Sandbox Code Playgroud)

我不知道如何指定它是一个实例,然后还指定一个位置.看来这可以用nsmap关键字-arg 来完成etree.Element,但我不知道怎么做.

python lxml xml-namespaces

7
推荐指数
1
解决办法
8815
查看次数

无法为使用XSL的子项添加名称空间前缀

我在这里查了很多答案,我想我差不多了.有一件事困扰着我(由于某些原因,我的同伴需要它)如下:

我有以下输入XML:

<?xml version="1.0" encoding="utf-8"?>
<MyRoot>
  <MyRequest CompletionCode="0" CustomerID="9999999999"/>
  <List TotalList="1">
    <Order CustomerID="999999999" OrderNo="0000000001" Status="Shipped">
      <BillToAddress ZipCode="22221"/>
      <ShipToAddress ZipCode="22222"/>
      <Totals Tax="0.50" SubTotal="10.00" Shipping="4.95"/>
    </Order>
  </List>
  <Errors/>
</MyRoot>
Run Code Online (Sandbox Code Playgroud)

我被要求制作这个:

<ns:MyNewRoot xmlns:ns="http://schemas.foo.com/response"  
xmlns:N1="http://schemas.foo.com/request"  
xmlns:N2="http://schemas.foo.com/details">
    <N1:MyRequest CompletionCode="0" CustomerID="9999999999"/>
    <ns:List TotalList="1">
            <N2:Order CustomerID="999999999" Level="Preferred" Status="Shipped">
                    <N2:BillToAddress ZipCode="22221"/>
                    <N2:ShipToAddress ZipCode="22222"/>
                    <N2:Totals Tax="0.50" SubTotal="10.00" Shipping="4.95"/>
            </N2:Order>
    </ns:List>
    <ns:Errors/>
</ns:MyNewRoot>
Run Code Online (Sandbox Code Playgroud)

注意N2:Order的子节点还需要N2:前缀以及其余元素的ns:前缀.

我使用下面的XSL转换:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="@* | node()">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
 </xsl:template>


<xsl:template match="/MyRoot">
 <MyNewRoot xmlns="http://schemas.foo.com/response"
   xmlns:N1="http://schemas.foo.com/request"
   xmlns:N2="http://schemas.foo.com/details">
     <xsl:apply-templates/>
 </MyNewRoot> …
Run Code Online (Sandbox Code Playgroud)

xml xslt namespaces transformation xml-namespaces

7
推荐指数
1
解决办法
7992
查看次数

为什么在Eclipse中创建Servlet会破坏我的web.xml?

有点懒,我很高兴发现我可以通过New - > Servlet来创建一个新的servlet源代码,而不是去New - > Class然后将类编辑成一个servlet.

但是,我发现每次在Eclipse中创建一个新的servlet时,Eclipse都会修改我的web.xml.

具体来说,它将top元素修改为:

<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
    xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    id="WebApp_ID" version="2.4">
Run Code Online (Sandbox Code Playgroud)

(我的线路爆炸.)

这似乎并不一定是坏事,但它通过在其名称前面加上"javaee:"来修改各种子元素,以指示这些元素属于该命名空间.

例如,它会改变

<display-name>ShowLifecycles</display-name>
Run Code Online (Sandbox Code Playgroud)

<javaee:display-name>ShowLifecycles</javaee:display-name>
Run Code Online (Sandbox Code Playgroud)

之后,eclipse会抱怨它修改的所有元素,给我一些符号:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'javaee:display-name'. One of '{"http://
 java.sun.com/xml/ns/j2ee":description, "http://java.sun.com/xml/ns/j2ee":display-name, "http://java.sun.com/xml/ns/
 j2ee":icon, "http://java.sun.com/xml/ns/j2ee":distributable, "http://java.sun.com/xml/ns/j2ee":context-param, "http://
 java.sun.com/xml/ns/j2ee":filter, "http://java.sun.com/xml/ns/j2ee":filter-mapping, "http://java.sun.com/xml/ns/
 j2ee":listener, "http://java.sun.com/xml/ns/j2ee":servlet, "http://java.sun.com/xml/ns/j2ee":servlet-mapping, "http://
 java.sun.com/xml/ns/j2ee":session-config, "http://java.sun.com/xml/ns/j2ee":mime-mapping, "http://java.sun.com/xml/ns/
 j2ee":welcome-file-list, "http://java.sun.com/xml/ns/j2ee":error-page, "http://java.sun.com/xml/ns/j2ee":jsp-config, "http://
 java.sun.com/xml/ns/j2ee":security-constraint, "http://java.sun.com/xml/ns/j2ee":login-config, "http://java.sun.com/xml/ns/
 j2ee":security-role, "http://java.sun.com/xml/ns/j2ee":env-entry, "http://java.sun.com/xml/ns/j2ee":ejb-ref, "http://
 java.sun.com/xml/ns/j2ee":ejb-local-ref, "http://java.sun.com/xml/ns/j2ee":service-ref, "http://java.sun.com/xml/ns/
 j2ee":resource-ref, "http://java.sun.com/xml/ns/j2ee":resource-env-ref, "http://java.sun.com/xml/ns/j2ee":message-
 destination-ref, "http://java.sun.com/xml/ns/j2ee":message-destination, "http://java.sun.com/xml/ns/j2ee":locale-
 encoding-mapping-list}' is expected.
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,当我使用find和replace将所有内容删除到"javaee:"中时,Eclipse仍会抱怨这些文件,即使它们不再存在.我必须将整个剩余文件复制并粘贴到自身之上,以避免这些投诉.

我确信Eclipse正在努力发挥作用,期待这个命名空间的一些愿望或需求.我怎样才能做以下两件事之一: …

java eclipse web.xml servlets xml-namespaces

7
推荐指数
1
解决办法
3万
查看次数

XSLT在输出文件中注入不需要的命名空间

我见过类似的问题,但我还不清楚.我不希望"n1"命名空间出现在输出文件中节点的属性中.但我必须在xslt文件中创建"n1"命名空间才能使xpath正常工作.谢谢.

XSLT:

   <xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:n1="http://www.spicefactory.org/parsley"
        xmlns="http://www.spicefactory.org/parsley"
        >

    <xsl:output method="xml" indent="no"/>

    <xsl:template match="node()|@*">
         <xsl:copy>
           <xsl:apply-templates select="node()|@*"/>
         </xsl:copy>
     </xsl:template>

     <xsl:template match="n1:object[@type='mytype1']">
      <object  type="mytype2">
        <xsl:apply-templates select="node()"/>
      </object>
     </xsl:template>
Run Code Online (Sandbox Code Playgroud)

从OUTPUT XML文件中获取:

<object type="mytype2" xmlns:n1="http://www.spicefactory.org/parsley">
Run Code Online (Sandbox Code Playgroud)

xml xslt xml-namespaces

7
推荐指数
1
解决办法
2882
查看次数

没有互联网连接,xmlns属性如何通过浏览器工作和理解?

一个简单的XHTML文档,具有最少的必需标记:和xmlns属性具有http链接.

如果我正在使用localhost,如果我没有Internet连接,我不能使用XHTML吗?

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Title of the document</title>
    </head>

    <body>
        The content of the document......
    </body>

</html>
Run Code Online (Sandbox Code Playgroud)

html xhtml xml-namespaces internet-connection

7
推荐指数
1
解决办法
1768
查看次数

命名空间 URI 到底意味着什么?

让我们考虑这个 xml 数据

<root xmlns:h="http://www.w3.org/TR/html4/"
 xmlns:f="http://www.w3schools.com/furniture">

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<f:table>
  <f:name>African Coffee Table</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>
Run Code Online (Sandbox Code Playgroud)

这里 h 的 NURI:“ http://www.w3.org/TR/html4/
f 的 NURI:“ http://www.w3schools.com/furniture
NURI(命名空间 URI)到底意味着什么?有必要吗?。它实际上包含什么?

xml xml-namespaces

7
推荐指数
1
解决办法
1万
查看次数

XmlSerializer +抽象类+派生类=无用的命名空间

关于SO的第一个问题:,)它是关于XmlSerializer和命名空间问题的.

我知道如何从Xml文件的根元素中删除默认的Xml命名空间已经有很多主题,而且它不是主题.

我的问题是当你使用派生类时如何从子节点中删除它?

我已经创建了自己的序列化程序,可以使用自定义命名空间或只是忽略它们,并且它对根元素很有效.

但是当我使用抽象类在List中列出一些派生类时,序列化插入2属性在每个派生类的节点内.

像这样 :

<root>
  <elements>
    <element p3:type="XmlDerivedClass" xmlns:p3="{schema_url}" >
    </element>
  </elements>
</root>
Run Code Online (Sandbox Code Playgroud)

至于我的班级:

// Root element
[XmlRoot("root", Namespace="")]
public class XmlRootElement
{
    List<XmlBaseClass> _Elements;
}    

// Base class
[XmlInclude(typeof(XmlDerivedClass))] // Mandatory, prevents serialization errors
[XmlRoot(Namespace="")]
public abstract class XmlBaseClass

// Derived class
[XmlRoot("element", Namespace="")]
public class XmlDerivedClass : XmlBaseClass
Run Code Online (Sandbox Code Playgroud)

我试过一些常见的解决方案

  • 使用Namespace =""属性
  • 实现XmlNamespaceDeclarations属性(使用右空命名空间)
  • XmlRoot()从base clase移动到派生的clase
  • XmlRoot()更改为XmlElement()

我将尝试在List上添加XmlInclude标记,以查看它是否发生了变化.

到目前为止,没有任何方法可以删除那些该死的命名空间......

如果有人有解决方案,我会很高兴尝试.

[编辑21/02/2014] 好吧,我似乎是唯一一个面临这个问题的人.我将使用一个简单的 …

.net c# xml serialization xml-namespaces

7
推荐指数
1
解决办法
3682
查看次数

CSS 命名空间属性选择器可以与 XHTML/HTML 元素一起使用吗?

我想xlink:href在 XHTML 中使用属性设置元素的样式,但是我无法使其工作。我的测试代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:xyz="http://xyz.org">
<head>
<meta charset="UTF-8" />
<title>css namespace</title>
<style>
body { font-size: 20px; } /* Oops! A normal rule must not precede @namespace rules! */
@namespace html "http://www.w3.org/1999/xhtml";
@namespace xlink "http://www.w3.org/1999/xlink";
@namespace xyz "http://xyz.org";
html|p {
  color: blue;
}
[xlink|href], [xyz|href] {
  cursor: pointer;
  text-decoration: underline;
  color: red;
}
xyz|p, xyz {
  display: block;
}
</style>
</head>
<body>
<!-- typos: 'xref' should be 'href', thank BoltClock's answer! -->
<p xlink:xref="aaa">&lt;p xlink:xref …
Run Code Online (Sandbox Code Playgroud)

html css xhtml xml-namespaces css-selectors

7
推荐指数
1
解决办法
3368
查看次数

反序列化大型XML文档中的单个元素:由于名称空间问题,xmlSerializer.Deserialize(xmlReader.ReadSubtree())失败

我试图XmlReader在一次传递中处理一个大的XML文档(使用a ),并使用一个反序列化其中的某些元素XmlSerializer.

下面是一些代码和一个微小的模拟XML文档,显示了我是如何尝试这样做的.

使用的基本原理XmlReader: 1.我正在处理非常大的XML文档(10-250 MB),因此我不想加载到内存中.所以XmlDocument是不可能的.2.我想只提取某些元素.通常,我将能够忽略大多数其他内容.XmlReader似乎给了我一种跳过不相关内容的有效方法.3.我不提前知道是否有任何我能应付将出现的所有元素; 因此,我没有使用一堆Xpath/ XQuery或LINQ到基于XML的查询,因为我只想对XML文件进行一次传递(由于它们的大小).

public class ElementOfInterest { }
…

var xml = @"<?xml version='1.0' encoding='utf-8' ?>
            <Root xmlns:ex='urn:stakx:example'
                  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
              <ElementOfInterest xsi:type='ex:ElementOfInterest' />
            </Root>";

var reader = System.Xml.XmlReader.Create(new System.IO.StringReader(xml));
reader.ReadToFollowing("ElementOfInterest");

var serializer = new System.Xml.Serialization.XmlSerializer(typeof(ElementOfInterest));
serializer.Deserialize(reader.ReadSubtree());
Run Code Online (Sandbox Code Playgroud)

最后一行代码抛出以下内部异常:

InvalidOperationException:" ex未定义名称空间前缀."

显然,XmlSerializer不识别属性值ex内的名称空间前缀xsi:type.

这只是我遇到的一个错误,但坦率地说,更大的问题是我不知道如何解决整个命名空间问题.我只是在寻找一种方便的方法来从XML文档中反序列化单个节点,但这似乎需要手动注册/管理命名空间,并以某种方式将它们转发XmlReaderXmlSerializer.

有人XmlReader可以通过指出我的代码中的错误,或通过显示替代方法来演示如何从使用的XML文档中反序列化单个节点吗?

c# xml xmlreader xml-namespaces xmlserializer

7
推荐指数
1
解决办法
1965
查看次数

如何修复 Jackson 为同一名称空间渲染多个名称空间前缀

我有一个 pojo,我正在使用 com.fasterxml.jackson.dataformat.xml.XmlMapper 序列化它。

我有一个用多个字符串值定义的 Java 类。

@JacksonXmlRootElement(namespace = "http://www.firstnamespace.com", localName = "Student")    
public class Student {
    @JacksonXmlProperty(namespace = "http://www.firstnamespace.com",localName = "ID")
    public final String id;
    @JacksonXmlProperty(namespace = "http://www.firstnamespace.com",localName = "Name")
    public final String name;
    @JacksonXmlProperty(namespace = "http://www.firstnamespace.com",localName = "Address")
    public Address address;
}
Run Code Online (Sandbox Code Playgroud)

地址定义如下,地址的元素位于不同的命名空间中

public class Address {
    @JacksonXmlProperty(namespace = "http://www.secondnamespace.com",localName = "StreetNumber")
    public final String streetNumber;
    @JacksonXmlProperty(namespace = "http://www.secondnamespace.com",localName = "StreetName")
    public final String steetName;
}
Run Code Online (Sandbox Code Playgroud)

当我用 Jackson 序列化 Student 时,我最终得到了地址对象的一堆重复的命名空间。

<Student xmlns="http://www.firstnamespace.com">
    <ID>1234</ID>
    <Name>Ken</Name>
    <Address>
        <wstxns1:StreetNumber xmlns:wstnxs1="http://www.secondnamespace.com">Ken</wstxns1:StreetNumber> …
Run Code Online (Sandbox Code Playgroud)

java xml xml-serialization xml-namespaces jackson-dataformat-xml

7
推荐指数
0
解决办法
2460
查看次数