标签: xml-namespaces

XElement会自动将xmlns =""添加到自身

我正在从表创建一个新的XDocument.我必须从XSD文档验证文档并且它一直失败,因为它在不应该的时候将xmlns =""添加到其中一个元素.以下是相关代码的一部分.

    XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
                XNamespace xmlns = "https://uidataexchange.org/schemas";
                XElement EmployerTPASeparationResponse = null;
                XElement EmployerTPASeparationResponseCollection = new XElement(xmlns + "EmployerTPASeparationResponseCollection", new XAttribute(XNamespace.Xmlns + "xsi", xsi), new XAttribute(xsi + "schemaLocation", "https://uidataexchange.org/schemas SeparationResponse.xsd"));
                XDocument doc = new XDocument(
                new XDeclaration("1.0", null, "yes"), EmployerTPASeparationResponseCollection);
    //sample XElement populate Element from database
    StateRequestRecordGUID = new XElement("StateRequestRecordGUID");
                        StateRequestRecordGUID.SetValue(rdr["StateRequestRecordGUID"].ToString());

    //sample to add Elements to EmployerTPASeparationResponse
    EmployerTPASeparationResponse = new XElement("EmployerTPASeparationResponse");
                    if (StateRequestRecordGUID != null)
                    {
                        EmployerTPASeparationResponse.Add(StateRequestRecordGUID);
                    }

    //the part where I add the EmployerTPASeparationResponse collection to the …
Run Code Online (Sandbox Code Playgroud)

c# linq-to-xml xml-namespaces

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

XSD包含来自其他命名空间的元素

我有两个XSD定义不同的文档.Say A.xsd将元素定义ElementA为根,具有一些复杂的规则.现在B.xsd定义一个ElementB应该ElementA在两者之间使用的元素.

例如,我希望XML文件ElementB看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<ElementB xmlns="http://example.com/namespace/for/ElementB">
  <foo>Bla</foo>
  <bar>Blub</bar>
  <ElementA xmlns="http://example.com/namespace/for/ElementA">
    <!-- ... -->
  </ElementA>
</ElementB>
Run Code Online (Sandbox Code Playgroud)

然后B.xsd可能看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns="http://example.com/namespace/for/ElementB" targetNamespace="http://example.com/namespace/for/ElementB" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="ElementB">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="foo" type="xs:string" />
        <xs:element name="bar" type="xs:string" />

        <!-- And now I want to include ElementA somehow -->
        <xs:element name="ElementA" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

问题是,我真的不希望克隆的规格ElementAB.xsd,因为也有文件,那只是ElementA作为根(即ElementB某种容器文件).

那么,如何在已经存在的XSD之上完全构建的同时允许ElementA内部 …

xml xsd xml-namespaces

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

使用jaxb将名称空间添加到xml的根元素

我正在创建一个xml文件,其根元素结构应该是这样的:

   <RootElement xmlns="http://www.mysite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/abc.xsd">
Run Code Online (Sandbox Code Playgroud)

我创建了package-info.java类,但是通过编写这段代码我只能获得一个命名空间:

@XmlSchema(
        namespace = "http://www.mysite.com",
        elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package myproject.myapp;
import javax.xml.bind.annotation.XmlSchema;
Run Code Online (Sandbox Code Playgroud)

任何的想法?

xsd jaxb xml-namespaces

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

xmln:tns和targetNamespace

我看到一些XSD架构文档在其顶部元素中声明了a targetNamespacexmlns:tns属性schema.例如下面的一个从这里开始.它们似乎也具有相同的字符串值.我理解的角色,targetNamespace但最重要的是xmlns:tns做什么?

<?xml version="1.0" encoding="UTF-8"?>
<schema
    xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/Product"
    xmlns:tns="http://www.example.org/Product"
    elementFormDefault="qualified">
...
Run Code Online (Sandbox Code Playgroud)

xsd xml-namespaces

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

JSF 1.2和JSF 2.x之间的JSTL xmlns名称空间差异?

我有一个基于JSF 1.2的webapp,我从中复制了JSTL导入

xmlns:c="http://java.sun.com/jstl/core"
Run Code Online (Sandbox Code Playgroud)

您还可以在Internet上的许多位置找到此导入.我不记得上面无论是在我以前的Web项目的工作或没有,在任何情况下,它并没有在我目前的JSF 2.0 Web应用基础工作.我收到集装箱的警告说:

警告:此页面调用带有前缀c声明的XML命名空间http://java.sun.com/jstl/core,但该命名空间不存在taglibrary.

然后我将导入更改为

xmlns:c="http://java.sun.com/jsp/jstl/core"
Run Code Online (Sandbox Code Playgroud)

... <c:forEach>在基于JSF/RichFaces的webapp中删除了所有令人头疼的问题.

这里的诀窍是什么?从JSF 1.2到2.x的JSTL导入URL是否有任何更改?或者前一行通常是错误的(在JSF中)?这两者有什么区别?

import jsf jstl xml-namespaces jsf-2

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

如何在XDocument中删除除root之外的节点的xmlns属性

情况

我正在XDocument尝试删除xmlns=""第一个内部节点上的属性:

<Root xmlns="http://my.namespace">
    <Firstelement xmlns="">
        <RestOfTheDocument />
    </Firstelement>
</Root>
Run Code Online (Sandbox Code Playgroud)

所以我想要的结果是:

<Root xmlns="http://my.namespace">
    <Firstelement>
        <RestOfTheDocument />
    </Firstelement>
</Root>
Run Code Online (Sandbox Code Playgroud)

doc = XDocument.Load(XmlReader.Create(inStream));

XElement inner = doc.XPathSelectElement("/*/*[1]");
if (inner != null)
{
    inner.Attribute("xmlns").Remove();
}

MemoryStream outStream = new MemoryStream();
XmlWriter writer = XmlWriter.Create(outStream);
doc.Save(writer); // <--- Exception occurs here
Run Code Online (Sandbox Code Playgroud)

问题

在尝试保存文档时,我得到以下异常:

在同一个start元素标记内,前缀''不能从''重新定义为' http://my.namespace '.

这甚至意味着什么,我该怎么做才能消除那些麻烦xmlns=""

笔记

  • 我确实想保留根节点的命名空间
  • 我只希望xmlns删除特定xmlns的文件,文件中没有其他属性.

更新

我尝试过使用这个问题的答案启发的代码:

inner = new XElement(inner.Name.LocalName, inner.Elements());
Run Code Online (Sandbox Code Playgroud)

调试时,该xmlns …

.net c# xml linq-to-xml xml-namespaces

20
推荐指数
2
解决办法
4万
查看次数

在Java中,在没有正确名称空间的节点中查找元素

所以我有一个我在这里声明的xml文档:

DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
StringReader reader = new StringReader(s);
InputSource inputSource = new InputSource(reader);
doc_ = dBuilder.parse(inputSource);
Run Code Online (Sandbox Code Playgroud)

然后我有一个函数,我传入一个字符串,我想将它与我的xml中的元素匹配:

void foo(String str)
{
  NodeList nodelist = doc_.getDocumentElement().getElementsByTagName(str);
}
Run Code Online (Sandbox Code Playgroud)

问题是,当它str进入它没有任何类型的命名空间,所以我将测试的xml将是:

<Random>
  <tns:node />
</Random>
Run Code Online (Sandbox Code Playgroud)

并且str将是节点.因此nodelist现在为null,因为它期望tns:node但我传入了node.我知道忽略命名空间并不好,但在这种情况下它很好.我的问题是我不知道如何在忽略命名空间的同时在Node中搜索元素.我还想过将命名空间添加到str中,但我不知道如何做到这一点.

任何帮助将不胜感激,

谢谢,-Josh

java xml dom xml-namespaces nodelist

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

XSL - 复制元素但删除未使用的命名空间

我有一些XML声明了一个仅用于属性的命名空间,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:x="http://tempuri.com">
    <b>
        <c x:att="true"/>
        <d>hello</d>
    </b>
</a>
Run Code Online (Sandbox Code Playgroud)

我想使用XSL创建所选节点及其值的副本 - 摆脱属性.所以我想要的输出是:

<?xml version="1.0" encoding="UTF-8"?>
<b>
    <c />
    <d>hello</d>
</b>
Run Code Online (Sandbox Code Playgroud)

我有一些XSL几乎可以做到这一点,但我似乎无法阻止它将名称空间声明放在输出的顶级元素中.我的XSL是:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <xsl:apply-templates select="/a/b"/>
    </xsl:template>

    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

输出的第一个元素是<b xmlns:x="http://tempuri.com">而不是<b>.我已经尝试在XSL中声明命名空间并将前缀放在exclude-result-prefixes列表中,但这似乎没有任何效果.我究竟做错了什么?

更新:我发现通过在XSL中声明命名空间并使用extension-element-prefixes属性工作,但这似乎不正确!我想我可以使用它,但我想知道为什么exclude-result-prefixes不起作用!

更新:实际上,这个extension-element-prefixes解决方案似乎只适用于XMLSpy的内置XSLT引擎,而不适用于MSXML.

xslt xml-namespaces

18
推荐指数
2
解决办法
3万
查看次数

使用PHP从XML中删除命名空间

我有一个XML文档,如下所示:

<Data 
  xmlns="http://www.domain.com/schema/data" 
  xmlns:dmd="http://www.domain.com/schema/data-metadata"
>
  <Something>...</Something>
</Data>
Run Code Online (Sandbox Code Playgroud)

我正在使用PHP中的SimpleXML解析信息.我正在处理数组,我似乎遇到了命名空间的问题.

我的问题是:如何删除这些名称空间?我从XML文件中读取数据.

谢谢!

php simplexml xml-namespaces

18
推荐指数
2
解决办法
2万
查看次数

如何用LXML编写命名空间元素属性?

我正在使用lxml(2.2.8)来创建和编写一些XML(特别是XGMML).将要阅读它的应用程序显然相当挑剔,并希望看到一个顶级元素:

<graph label="Test" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="h
ttp://www.w3.org/1999/xlink" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-
ns#" xmlns:cy="http://www.cytoscape.org" xmlns="http://www.cs.rpi.edu/XGMML"  di
rected="1">
Run Code Online (Sandbox Code Playgroud)

如何xmlns:使用lxml 设置这些属性?如果我尝试明显的

root.attrib['xmlns:dc']='http://purl.org/dc/elements/1.1/'
root.attrib['xmlns:xlink']='http://www.w3.org/1999/xlink'
root.attrib['xmlns:rdf']='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
root.attrib['xmlns:cy']='http://www.cytoscape.org'
root.attrib['xmlns']='http://www.cs.rpi.edu/XGMML'
Run Code Online (Sandbox Code Playgroud)

lxml抛出一个 ValueError: Invalid attribute name u'xmlns:dc'

我过去曾经使用过很多XML和lxml来处理简单的事情,但是到目前为止还是设法避免需要知道关于命名空间的任何事情.

python lxml xml-namespaces cytoscape

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

标签 统计

xml-namespaces ×10

xml ×3

xsd ×3

c# ×2

linq-to-xml ×2

.net ×1

cytoscape ×1

dom ×1

import ×1

java ×1

jaxb ×1

jsf ×1

jsf-2 ×1

jstl ×1

lxml ×1

nodelist ×1

php ×1

python ×1

simplexml ×1

xslt ×1