标签: xml-namespaces

CXF 响应具有不合格的命名空间

我使用 CXF 2.3.0 来托管服务,但服务的响应如下所示

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <responseElement xmlns="http://xxx/yyyy.wsdl/types/">
             <result>
Run Code Online (Sandbox Code Playgroud)

但想要的是

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://xxx/yyyy.wsdl/types/">
   <env:Body>
      <ns0:responseElement>
         <ns0:result>
Run Code Online (Sandbox Code Playgroud)

我有一个 package-info 类,它声明元素命名空间是合格的。我还有什么需要做的吗?

soap cxf jaxb xml-namespaces

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

Java 中使用 SAX 处理命名空间

考虑以下输入 xml 文档:

<oracle:EMP xmlns:oracle="http://www.oracle.com/xml"/>
Run Code Online (Sandbox Code Playgroud)

...以及以下处理程序:

final class XMLizatorSaxHandler extends DefaultHandler {
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.println(uri + "," + localName + "," + qName);
    }
}
Run Code Online (Sandbox Code Playgroud)

当将它与 a 一起使用时,SAXParser我预计会出现以下输出:

uri: http://www.oracle.com/xml
localName: EMP
qName: oracle:EMP
Run Code Online (Sandbox Code Playgroud)

但我得到的是这个:

uri:
localName:
qName: oracle:EMP
Run Code Online (Sandbox Code Playgroud)

为什么?我怎样才能得到正确的信息?

java xml-namespaces saxparser

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

以编程方式创建带有命名空间的 xml 属性

我如何创建以下内容XElement

<data name="MyKey" xml:space="preserve">
    <value>Date of birth</value>
    <comment>Some comment</comment>
</data>
Run Code Online (Sandbox Code Playgroud)

它抛出

“‘:’字符(十六进制值 0x3A)不能包含在名称中。”

var data = new XElement("data");

data.Add(new XAttribute("name", translation.Key));
data.Add(new XAttribute("xml:space", "preserve")); // <-- here is the error

data.Add(new XElement("value") { Value = "Date of birth" });
data.Add(new XElement("comment") { Value = "Some comment" });
Run Code Online (Sandbox Code Playgroud)

由于这是文件的一部分ResX,因此会有许多这样的<data></data>元素。

c# xml linq-to-xml xml-namespaces

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

在 bash 中使用 xmllint 从带有命名空间的 xml 文件中提取值

我需要从此 xml 中提取名称值(产品查找器):

文件:config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget id="com.abc.app" version="1.3.1" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0" ios-CFBundleVersion="1.3.1.5" android-versionCode="5">
    <name>Product Finder</name>
    <description>
        Description
    </description>
</widget>
Run Code Online (Sandbox Code Playgroud)

我试过了:

mles$ xmllint --xpath "/widget/name/text()" config.xml 
XPath set is empty
Run Code Online (Sandbox Code Playgroud)

这可能是因为我的config.xml文件有其他命名空间。根据这个问题,我需要手动设置名称空间。所以我尝试过:

mles$ xmllint --shell config.xml / > setns x=http://www.w3.org/ns/widgets / > xpath /x:widget/name/text
Run Code Online (Sandbox Code Playgroud)

这一项上没有任何输出。使用 xmllint 提取名称值的正确语法是什么?

注意:我已经有了grep 和 sed 的解决方案,但我想使用 xmllint。

xml bash xml-namespaces xmllint

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

在具有命名空间前缀的元素内创建不具有命名空间前缀的 XML 元素

使用 XmlSerializer 类,我想实现以下结果 XML:

<n:root xmlns:n="http://foo.bar">
    <child/>
</n:root>
Run Code Online (Sandbox Code Playgroud)

请注意,根已定义命名空间和前缀,但子级没有。我设法使用以下 XSLT 来做到这一点:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">

        <xsl:element name="n:root" xmlns:n="http://foo.bar">
            <xsl:element name="child" />
        </xsl:element >

    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

...但是我想在类上使用 .NET XmlSerializer 和 System.Xml.Serialization 属性。我创建了以下两个类:

[XmlRoot(ElementName = "root", ElementNamespace = "http://foo.bar")]
public class Root
{
    [XmlElement(ElementName = "child")]
    public Child Child { get; set; }
}

public class Child {}
Run Code Online (Sandbox Code Playgroud)

然后我尝试将命名空间添加到 XmlSerializer 并使用 XmlSerializerNamespaces 类对其进行序列化:

public string Foo()
{
    var root = new Root { Child = new Child() };

    var ns = …
Run Code Online (Sandbox Code Playgroud)

.net c# xml xml-namespaces xmlserializer

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

如何将 Scrapy XPath 与 XML 命名空间一起使用?

如何<content:encoded> ... </content:encoded>使用scrapy XPath 从RSS 提要中提取内容(示例如下)?

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Latest &#8211; Reason.com</title>
    <item>
        <pubDate>Thu, 16 Jan 2020 21:40:23 +0000</pubDate>
        <content:encoded><![CDATA[<p><span style="font-weight: 400">
          Jimmy Meders was scheduled to die by lethal injection today, 
          but the Georgia parole board has granted him clemency.</span></p>]]> 
        </content:encoded>
...
Run Code Online (Sandbox Code Playgroud)

我试过了response.xpath('//content:encoded').get(),但它不起作用。

任何帮助都受到高度赞赏。

html xml xpath xml-namespaces scrapy

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

在解析之前使用 lxml 注册命名空间

我使用 lxml 从具有命名空间的外部服务解析 XML,但未将它们注册到xmlns. 我正在尝试手动注册它register_namespace,但这似乎不起作用。

from lxml import etree

xml = """
    <Foo xsi:type="xsd:string">bar</Foo>
"""

etree.register_namespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance')
el = etree.fromstring(xml) # lxml.etree.XMLSyntaxError: Namespace prefix xsi for type on Foo is not defined
Run Code Online (Sandbox Code Playgroud)

我缺少什么?奇怪的是,查看 lxml 源代码来尝试理解我可能做错了什么,似乎xsi命名空间应该已经作为默认命名空间之一存在。

python xml lxml xml-namespaces

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

如何使用 lxml 创建命名空间元素?

我正在使用 lxml 生成最终用作播客的 RSS 提要。这意味着我需要添加命名空间元素,例如<itunes:duration><itunes:subtitle>。但我在尝试弄清楚如何使用 lxml 动态创建此类元素时遇到了很多麻烦。

如果我简单地尝试:

from lxml import etree

element = etree.Element("itunes:duration")
Run Code Online (Sandbox Code Playgroud)

我明白了:

ValueError: Invalid tag name 'itunes:duration'
Run Code Online (Sandbox Code Playgroud)

接下来我尝试了这个并且更接近了:

from lxml import etree

etree.register_namespace("itunes", "http://www.itunes.com/dtds/podcast-1.0.dtd")
element = etree.Element("{itunes}duration")
print(etree.tostring(element).decode("utf-8"))
Run Code Online (Sandbox Code Playgroud)

然而,这导致了这个输出:

<ns0:duration xmlns:ns0="itunes"/>
Run Code Online (Sandbox Code Playgroud)

因此,虽然这比例外要好,但​​它显然仍然是不对的。如何创建itunes:标签名称中带有前缀的元素?

python xml podcast lxml xml-namespaces

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

Java QName前缀不起作用

我的问题很简单.我正在为需要具有名称空间前缀的SOAP请求添加标头.因此,我正在使用

QName(String namespaceURI,
             String localPart,
             String prefix)
Run Code Online (Sandbox Code Playgroud)

问题是虽然我设置了前缀,但没有添加任何内容,即:

new QName("http://lit.com/schemas/Bobsled", "bob:sessionId")
Run Code Online (Sandbox Code Playgroud)

我明白了 <bob:sessionId xmlns="http://lit.com/schemas/Bobsled">

并使用前缀:

new QName("http://lit.com/schemas/Bobsled", "bob:sessionId","bob")
Run Code Online (Sandbox Code Playgroud)

它应该是完全相同的,它应该是:

<bob:sessionId xmlns:bob="http://lit.com/schemas/Bobsled">
Run Code Online (Sandbox Code Playgroud)

...似乎构造函数中的前缀没有做任何事情!

java xml-namespaces

2
推荐指数
1
解决办法
6614
查看次数

C#相当于VB.NET"Imports <xmlns>"XML模式

我有一个旧的VB.NET Web应用程序项目,我正在转换为C#.我已经使用SharpDevelop转换了大部分应用程序但是遇到了转换一些特殊情况代码的问题:

' Namespace
Imports <xmlns:items="urn:list_items">

' Code:
Dim group = From items In ListItems...<items:item> _
                 Where items.<item.name> = "Something"
                 Select names = items.<item.name>
Run Code Online (Sandbox Code Playgroud)

我不知道VB.NET使用XML模式的方法的C#等价物.有没有一种方法可以导入模式并使用相同的LINQ语句?

编辑:

让我通过一个循环的部分是转换(通过SharpDevelop)Imports <xmlns:items="urn:list_items">using urn:list_items.编译器抱怨这种语法.

我很好奇是否有一个C#等价的指令来导入XML模式并将其用作LINQ查询的一部分,但考虑到C#不像VB.NET那样支持XML文字,它不是相关.

c# vb.net xml-namespaces

2
推荐指数
1
解决办法
799
查看次数

标签 统计

xml-namespaces ×10

xml ×6

c# ×3

java ×2

lxml ×2

python ×2

.net ×1

bash ×1

cxf ×1

html ×1

jaxb ×1

linq-to-xml ×1

podcast ×1

saxparser ×1

scrapy ×1

soap ×1

vb.net ×1

xmllint ×1

xmlserializer ×1

xpath ×1