我有一个很大的WPF应用程序,有很多XAML文件.每个XAML文件都有5到10个clr到xml命名空间映射xmlns:abc="clr-namespace:Abcdef".
它看起来很糟糕,并且在每个文件中写入都很痛苦.
有没有办法在全球范围内定义?
在Oracle论坛,Stackoverflow,java.net上阅读了有关此内容的所有帖子后,我终于在这里发帖了.我正在使用JAXB来创建XML文件,但问题是它在我的元素之前添加了着名的ns2前缀,我已经尝试了所有没有人为我工作的解决方案.java -version给出"1.6.0_37"
解决方案1:使用package-info.java
我在我的包中创建了包含带有以下内容的@ Xml*注释类的文件:
@XmlSchema(
namespace = "http://mynamespace",
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(namespaceURI = "http://mynamespace", prefix = "")
}
)
package com.mypackage;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
Run Code Online (Sandbox Code Playgroud)
解决方案2:NamespacePrefixMapper
我创建了以下类并将映射器设置为marshaller:
// Change mapper to avoid ns2 prefix on generated XML
class PreferredMapper extends NamespacePrefixMapper {
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
return "";
}
}
NamespacePrefixMapper mapper = new PreferredMapper();
try {
marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
}
catch (PropertyException e) {
logger.info("No property …Run Code Online (Sandbox Code Playgroud) 我试过了:
textBox1.Text = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("root1", new XAttribute( "xmlns", @"http://example.com"), new XElement("a", "b"))
).ToString();
Run Code Online (Sandbox Code Playgroud)
但我得到:
The prefix '' cannot be redefined from '' to 'http://example.com' within the same start element tag.
Run Code Online (Sandbox Code Playgroud)
我也试过替换(根据我发现的答案):
XAttribute(XNamespace.Xmlns,...
Run Code Online (Sandbox Code Playgroud)
但也有错误.
注意:我不是要在文档中使用多个xmlns.
我正在实现一个自制的XMPP子协议,我正在使用StAX和JAXB的组合来解析/编组消息.当我编组一条消息时,我最终会遇到大量不需要的命名空间声明:
<ns2:auth xmlns:ns2="urn:ietf:params:xml:ns:ilf-auth"
xmlns:ns4="ilf:iq:experiment:power" xmlns:ns3="ilf:iq:experiment:init"
xmlns:ns5="ilf:iq:experiment:values" xmlns:ns6="ilf:iq:experiment:result"
xmlns:ns7="ilf:iq:experiment:stop" xmlns:ns8="ilf:iq:experiment:end">
compton@ilf</ns2:auth>
Run Code Online (Sandbox Code Playgroud)
代替:
<ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>compton@ilf</ns:auth>
Run Code Online (Sandbox Code Playgroud)
有什么办法可以转变吗?
所有这些命名空间都用在由JAXB编组/解组的不同消息中,但每条消息都使用一个命名空间.
PS.我不是XML专家,如果我犯了一些愚蠢的错误,请不要骂我;)
什么是jQuery for Document.createElementNS()?
function emleGraphicToSvg(aGraphicNode) {
var lu = function luf(aPrefix){
switch (aPrefix){
case 'xhtml': return 'http://www.w3.org/1999/xhtml';
case 'math': return 'http://www.w3.org/1998/Math/MathML';
case 'svg': return 'http://www.w3.org/2000/svg';
}
return '';
};
var svg = document.evaluate("svg:svg",
aGraphicNode, lu, XPathResult.FIRST_ORDERED_NODE_TYPE, null).
singleNodeValue;
$(svg).children().remove();
rect = document.createElementNS(lu('svg'), "rect");
rect.setAttribute("x", "35");
rect.setAttribute("y", "25");
rect.setAttribute("width", "200");
rect.setAttribute("height", "50");
rect.setAttribute("class", "emleGraphicOutline");
svg.appendChild(rect);
}
Run Code Online (Sandbox Code Playgroud)
该代码是Emle的简化片段- 电子数学实验室设备 JavaScript文件emle_lab.js.
Look-Up-Function luf()将完整引用映射到XPath字符串中的命名空间的缩短名称createElementNS().现有svg:svg的位置,删除并替换为新的矩形.
我有一个包含许多facebook"Like"按钮的页面,使用内联fbml技术嵌入(而不是iframe).很简单.页面渲染正常,一切都按预期工作.
然而...
一旦我将xmlns:fb="http://www.facebook.com/2008/fbml"名称空间声明添加到文档中,我注意到IE中初始页面呈现时间的急剧下降.仔细检查(使用ie8开发人员工具)显示整个DOM在页面初始加载后的短时间内反复出现"刷新"或"回流".一些进一步的捣乱揭示了回流的数量显然与<fb:xxx>文件中的元素数量成比例.
删除xmlns声明会使问题消失.
以前有人经历过吗?
更新:
一些进一步的挖掘揭示了一些更具体的问题......问题确实是IE正在重新流动页面,包括重新执行任何内联脚本等等.原因似乎并不包含xmlns本身,而是按钮本身的xfbml呈现.添加xmlns只是触发了xfbml渲染,没有xmlns,按钮从未在第一时间呈现.以下标记说明了该问题.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<script type="text/javascript">
alert('some inline js');
</script>
</head>
<body>
<div id="fb-root"></div>
<div>
<fb:like href="http://example.local/1" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
<fb:like href="http://example.local/2" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
<fb:like href="http://example.local/3" layout="button_count" show_faces="false" width="80" action="like" font="arial" colorscheme="light"></fb:like>
</div>
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1" type="text/javascript"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当在ie中运行时,上面的示例生成3个警报,我希望只看到一个.
我想对此XML文件进行XPath查询(摘录显示):
<?xml version="1.0" encoding="UTF-8"?>
<!-- MetaDataAPI generated on: Friday, May 25, 2007 3:26:31 PM CEST -->
<Component xmlns="http://xml.sap.com/2002/10/metamodel/webdynpro" xmlns:IDX="urn:sap.com:WebDynpro.Component:2.0" mmRelease="6.30" mmVersion="2.0" mmTimestamp="1180099591892" name="MassimaleContr" package="com.bi.massimalecontr" masterLanguage="it">
...
<Component.UsedModels>
<Core.Reference package="com.test.test" name="MasterModel" type="Model"/>
<Core.Reference package="com.test.massimalecontr" name="MassimaleModel" type="Model"/>
<Core.Reference package="com.test.test" name="TravelModel" type="Model"/>
</Component.UsedModels>
...
Run Code Online (Sandbox Code Playgroud)
我正在使用这段代码:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document document = builder.parse(new File("E:\\Test branch\\test.wdcomponent"));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext(new NamespaceContext() {
...(omitted)
System.out.println(xpath.evaluate(
"//d:Component/d:Component.UsedModels/d:Core.Reference/@name",
document));
Run Code Online (Sandbox Code Playgroud)
我期待得到的:
MasterModel
MassimaleModel
TravelModel
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
MasterModel
Run Code Online (Sandbox Code Playgroud)
似乎只返回第一个元素.如何获取与查询匹配的所有匹配项?
我有这个简单的xml文档:
<?xml version='1.0' encoding='UTF-8'?>
<registry xmlns="http://www.iana.org/assignments" id="character-sets">
<registry id="character-sets-1">
<record>
<name>ANSI_X3.4-1968</name>
</record>
</registry>
</registry>
Run Code Online (Sandbox Code Playgroud)
当我使用这个xsl时,我可以提取名称:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.iana.org/assignments" version="1.0">
<xsl:template match="/my:registry">
<xsl:copy-of select="//my:record/my:name"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
但是,如果我省略了xsl xpath-selectors中的命名空间,我得不到输出:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://www.iana.org/assignments" xpath-default-namespace="http://www.iana.org/assignments" version="1.0">
<xsl:template match="/registry">
<xsl:copy-of select="//record/name"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
我认为xpath-default-namespace意味着要做的伎俩.我错过了什么?
如果库版本很重要我有
libexpat1(> = 1.95.8)
libxerces-C3.1
libxml2(> = 2.7.4)
libxslt1.1(> = 1.1.25)
AngularJS指令ng-以它们为前缀.为什么它坚持使用前缀而不是使用实际的xml命名空间?
来自AngularJS的文档:
如果您选择使用旧样式指令语法ng:那么在html中包含xml-namespace以使IE感到满意.(这是出于历史原因,我们不再推荐使用ng:.)
使用这样的东西似乎工作:
<html xmlns:ng="http://angularjs.org" ng:app="my-app">
Run Code Online (Sandbox Code Playgroud)
从这个jsFiddle可以看出这一点.
但它不建议使用它并仅仅因为历史原因而支持它.有人能指出我的原因是什么吗?来自Flex背景,我认为XML命名空间很棒,我很乐意使用它们,但也许Angular有充分理由采用前缀方法?
是否有人遇到这个"xmlns"命名空间问题(见下文)?我不能再建立我的工作项目了.
最后我尝试重新安装Android Studio并重新创建我的git存储库 - 问题仍然存在.
The prefix "xmlns" cannot be bound to any namespace explicitly; neither can the namespace for "xmlns" be bound to any prefix explicitly.
Error: The prefix "xmlns" cannot be bound to any namespace explicitly; neither can the namespace for "xmlns" be bound to any prefix explicitly.
:{project}:mergeReleaseResources FAILED
Execution failed for task ':{project}:mergeReleaseResources'.
> {project}/build/intermediates/incremental/mergeResources/release/merger.xml:1:61: Error: The prefix "xmlns" cannot be bound to any namespace explicitly; neither …Run Code Online (Sandbox Code Playgroud)