我\xe2\x80\x99是 XML 的新手,目前正在学习文档类型声明。无论如何,在 DTD 正文中声明元素时,元素名称必须与 XML 文档中的完全相同,包括任何命名空间前缀,这意味着用户可以\xe2\x80\x99 定义自己的命名空间,但必须使用前缀在 DTD 中定义。
\n\na) 我假设即使我们必须使用 DTD 中定义的前缀,我们仍然可以选择这些前缀指向哪些 URI?
\n\nb) 假设我们(在 DTD 中)声明一个元素,其中 pers 是命名空间前缀,这是否意味着 XML 文档中该元素的所有出现都需要包含前缀 \xe2\x80\x9cpers\xe2\x80\x9d?如果是这样的话,那就意味着通过 DTD,我们可以\xe2\x80\x99t 使用默认的命名空间功能?!
\n\n谢谢
\n\n编辑:
\n\nA)
\n\n\n\n\n实际上,除非有特别充分的理由,或者您有简单的语法要求并且不需要命名空间,否则您应该考虑使用 XML 模式。
\n
我确实计划改用 XML Schema,但我\xe2\x80\x99d 也喜欢学习 DTD 的基础知识。
\n\nb)
\n\n\n\n\n\xe2\x80\xa6 没有命名空间 URI 的概念(也没有默认命名空间)。
\n
如果我们在 DTD 中声明名为 \xe2\x80\x9cxmlns\xe2\x80\x9d 的属性:
\n\n<!ATTLIST contact xmlns CDATA #REQUIRED> \nRun Code Online (Sandbox Code Playgroud)\n\n那么XML文档可以使用默认命名空间功能(这里子元素<name>位于默认命名空间中): …
我试图在外部CSS(实际上是两个单独的文件)中编写名称空间.当我在浏览器上运行该文件时,它将不使用声明的命名空间.我认为该文件正在调用css文件,但它没有应用命名空间样式
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml version="1.0" encoding="utf-8"?>
<html xmlns:act="http://www.superstarmovies.com/actors"
xmlns:mov="http://www.superstarmovies.com/movies"
xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<title>Superstar Movies: Stars of the Month</title>
<link rel="stylesheet" href="movies.css" type="text/css" ?>
<link rel="stylesheet" href="actors.css" type="text/css" ?>
<link rel="stylesheet" href="superstar.css" type="text/css" />
</head>
<body>
<div id="heading"><img src="logo.gif" alt="Superstar Movies" /></div>
<div id="main">
<h1>Stars of the Month</h1>
<h3>Movies by Our Featured Stars!</h3>
<act:actors>
<act:actor>
<act:name>Halle Berry</act:name>
<act:date>August 14, 1966</act:date>
<act:birthplace>Cleveland, Ohio</act:birthplace>
<mov:movie genre="action" star="Halle Berry">
<mov:name>Catwoman</mov:name>
<mov:date>(2004)</mov:date>
<mov:length>104 …Run Code Online (Sandbox Code Playgroud) XML文件的结构大致如下:
<?xml version="1.0" encoding="UTF-8"?>
<a xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="url1" xsi:schemaLocation="url2 url3">
<b>
<c></c>
<c></c>
<c></c>
</b>
</a>
Run Code Online (Sandbox Code Playgroud)
我的目标是选择所有“c”元素,但以下 xpath 表达式不起作用:“//a/b/c”。
IE:
XmlDocument doc= new XmlDocument();
doc.Load(filepath);
XmlNodeList l = doc.SelectNodes("//a/b/c"); // 0 nodes
Run Code Online (Sandbox Code Playgroud)
我测试过的唯一有效的 xpath 表达式是 /*(1 个节点)和 //*(所有节点)。
这个问题是否与 XML 命名空间有关?如果是这样,设置 XMLDocument 对象的正确方法是什么?
XmlDocument doc= new XmlDocument();
doc.Load(filepath);
XmlNamespaceManager m = new XmlNamespaceManager(doc.NameTable);
m.AddNamespace(/* what goes here? */);
XmlNodeList l = doc.SelectNodes("//a/b/c", m);
Run Code Online (Sandbox Code Playgroud) 我最近对 XML 名称空间和在 PHP 中有效地处理它们感到非常悲痛。这是最糟糕的罪魁祸首的示例:
<dc:type xsi:type="TypeName" xsi:identifier="NN">Others</dc:type>
Run Code Online (Sandbox Code Playgroud)
我使用 preg_replace 成功做到的是使用以下方法“取消命名空间”标签(不破坏 URL):
$xml = preg_replace(
'/<(\/?)([^:" ].*):([^>\/ ].*)(\/?)>/msiU',
'<$1$2_$3$4>',
$x->readOuterXML()
);
# <dc_type xsi:type="TypeName" xsi:identifier="NN">Others</dc_type>
Run Code Online (Sandbox Code Playgroud)
我不能做的事情——由于缺乏正则表达式魔法——是将所有命名空间属性转换为相同的格式。我设法转换了第一次出现,但不知道如何设置可重复的条件。我删除了代码,因为它不起作用(我不记得我做了什么),但结果是这样的:
<dc_type xsi_type="TypeName" xsi:identifier="NN">Others</dc_type>
Run Code Online (Sandbox Code Playgroud)
而美丽的是这样的:
<dc_type xsi_type="TypeName" xsi_identifier="NN">Others</dc_type>
Run Code Online (Sandbox Code Playgroud)
有没有正则表达式大师可以提供帮助?
我试图在SVG中定义自己的命名空间,所以我可以使用自己的标签和属性.如果我理解正确,SVG应如下所示:
<svg xmlns:myns="http://www.example.com/whatever/">
<g myns:mycustomattr="123">
...
Run Code Online (Sandbox Code Playgroud)
我通过D3添加根SVG元素,但添加了一个名称空间attr失败:
var svg = d3.select("#container")
.append("svg")
.attr('xmlns:myns', 'http://www.example.com/whatever/')
Run Code Online (Sandbox Code Playgroud)
上面的代码导致:NamespaceError:尝试以对名称空间不正确的方式创建或更改对象
使用D3.js将名称空间添加到SVG的正确方法是什么?
我有一个以下格式的xml文档.
<Abc xmlns="http://qusetons.com/Cdc/AbcSchema.xsd">
<xxx>False</xxx>
<yyy>True</yyy>
<sss>Pd</sss>
</Abc>
Run Code Online (Sandbox Code Playgroud)
我正在使用XDocument类来解析此文档
var doc= XDocument.Load(fullfilepath);
Run Code Online (Sandbox Code Playgroud)
现在下面的代码来获取节点的值不起作用.我应该怎么做才能得到这个代码?
doc.XPathSelectElement("/Abc/xxx").value
Run Code Online (Sandbox Code Playgroud) 我想使用 XSLT 从 XML 文件中删除名为“searchBookResponse”的元素(包装器 - 而不是它的后代)。
当“searchBookResponse”元素没有属性或非“xmlns”属性时,我的 XSLT 代码工作得很好。但是,有了这些 xmlns 属性,它就不再起作用了。
这是输入的 XML 文档:
<?xml version="1.0" encoding="utf-8"?>
<books>
<searchBookResponse xmlns="urn:example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<book>
<author>Tom</author>
<title>Test</title>
</book>
<book>
<author>David</author>
<title>Test two</title>
</book>
</searchBookResponse>
<book>
<author>Anas</author>
<title>Test two</title>
</book>
<book>
<author>Jim</author>
<title>Test two</title>
</book>
</books>
Run Code Online (Sandbox Code Playgroud)
这是 XSL 样式表:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="@xmlns" />
<xsl:template match="searchBookResponse">
<xsl:apply-templates select="node()" />
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
应用后,输出 XML 文件与输入 XML 文件相同。我必须先应用一些字符串模式匹配来删除 …
假设我要使用Python修改以下XML ElementTree:
<root xmlns:prefix="URI">
<child company:name="***"/>
...
</root>
Run Code Online (Sandbox Code Playgroud)
我正在对XML文件进行如下修改:
import xml.etree.ElementTree as ET
tree = ET.parse('filename.xml')
# XML modification here
# save the modifications
tree.write('filename.xml')
Run Code Online (Sandbox Code Playgroud)
然后,XML文件如下所示:
<root xmlns:ns0="URI">
<child ns0:name="***"/>
...
</root>
Run Code Online (Sandbox Code Playgroud)
如您所见,namepsace prefix更改为ns0。我知道这里ET.register_namespace()提到的使用。
问题ET.register_namespace()在于:
prefix和URI例如,如果xml看起来像:
<root xmlns="http://uri">
<child name="name">
...
</child>
</root>
Run Code Online (Sandbox Code Playgroud)
它将转换为以下内容:
<ns0:root xmlns:ns0="http://uri">
<ns0:child name="name">
...
</ns0:child>
</ns0:root>
Run Code Online (Sandbox Code Playgroud)
如您所见,默认名称空间更改为ns0。
有什么办法解决这个问题ElementTree吗?
我有这个案子:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class Response
{
public string RetKey { get; set; }
public string RetType { get; set; }
}
[Test]
public void Test3()
{
{
var s = @"<Response CommandID=""57b48ae28f484ab4b3cc2e841cddd02a"">
<RetKey>5</RetKey>
<RetType>152</RetType>
</Response>";
var xmlSerializer = new XmlSerializer(typeof(Response));
var deserialize = (Response)xmlSerializer.Deserialize(new StringReader(s));
Assert.AreEqual("5", deserialize.RetKey, "no namespace");
}
{
var s = @"<Response xmlns=""http://www.sap.com/SBO/DIS"" CommandID=""57b48ae28f484ab4b3cc2e841cddd02a"">
<RetKey>5</RetKey>
<RetType>152</RetType>
</Response>";
var xRoot = new XmlRootAttribute
{
ElementName …Run Code Online (Sandbox Code Playgroud) 我需要为 Azure TTS 创建此标头:
<speak version="1.0"
xmlns="https://www.w3.org/2001/10/synthesis"
xmlns:mstts="https://www.w3.org/2001/mstts"
xml:lang="en-US">
Run Code Online (Sandbox Code Playgroud)
这是用于创建 xml:lang 键的代码:
xml_body = ElementTree.Element('speak', version='1.0')
xml_body.set('{http://www.w3.org/XML/1998/namespace}lang', 'en-us')
Run Code Online (Sandbox Code Playgroud)
我试图创建 xmlns:mstts 没有成功。这不起作用:
xml_body.set('{https://www.w3.org/2001/10/synthesis}mstts', 'https://www.w3.org/2001/mstts' )
Run Code Online (Sandbox Code Playgroud)
因为这会产生以下输出:
<speak version="1.0"
xmlns="https://www.w3.org/2001/10/synthesis"
xmlns:mstts="https://www.w3.org/2001/mstts"
xml:lang="en-US">
Run Code Online (Sandbox Code Playgroud)
请注意元素属性中的xmlns:ns0和ns0:mstts问题<speak>。
有任何想法吗?
xml-namespaces ×10
xml ×9
c# ×3
elementtree ×2
python ×2
xml-parsing ×2
css ×1
d3.js ×1
dtd ×1
html ×1
namespaces ×1
php ×1
regex ×1
svg ×1
xhtml ×1
xpath ×1
xsd ×1
xslt ×1