嵌套 xml 元素中的命名空间

发布于 2024-10-09 10:12:38 字数 717 浏览 2 评论 0原文

我已经看到了我现在遇到的问题的一些答案,但我的答案是嵌套的。

我有一个如下所示的 xml:

> 
<em>
<type xmlns="http://www.sitcom-project.org/sitcom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <model>
    <implemented_with>comoco</implemented_with>
    <implemented_in>perl</implemented_in>
    <cash_flow>casual</cash_flow>
    <interaction>conventional</interaction>
  </model>
</type>
</em>

现在,我如何访问 Implemented_with 节点的元素?

ofc 我可以通过这种方式访问​​ xmlList: 命名空间 ns = www.sitcom-project.org/sitcom; 类型.ns::模型; 但现在,我如何访问模型 xmlList 中的 Implemented_with 节点? 我尝试了 type.ns::model.implemented_with,但没有成功。有人知道吗? 谢谢

I have seen afew answers to the problem i am having now but mine is that of a nested one.

I have an xml looking like this:

> 
<em>
<type xmlns="http://www.sitcom-project.org/sitcom" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <model>
    <implemented_with>comoco</implemented_with>
    <implemented_in>perl</implemented_in>
    <cash_flow>casual</cash_flow>
    <interaction>conventional</interaction>
  </model>
</type>
</em>

now, how do i access the element of the implemented_with node?

ofc i could access the xmlList this way:
namespace ns = www.sitcom-project.org/sitcom;
type.ns::model;
but now, how do i access the implemented_with node in the model xmlList?
i tried type.ns::model.implemented_with, but didn't work. Anyone got any idea?
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你与昨日 2024-10-16 10:12:38

有几种方法可以做到这一点,但最好的方法是在每次点访问之前使用名称空间前缀。在您的情况下,您要做的第一件事就是隔离名称空间。您可以通过将命名空间硬编码到新的命名空间对象中来做到这一点......即;

var ns:Namespace = new Namespace( "http://www.sitcom-project.org/sitcom" );

或者更好的方法是从适当的节点中提取它。在下面的代码中,我获取了类型节点上声明的所有名称空间(作为数组),并且仅针对列表中的第一个名称空间。因为我事先不知道名称空间,所以我必须使用 Children() 方法来检索它。

var emNode:XML = _yourXML.em[0];
var typeRoot:XML = emNode.children()[0]; 
var ns:Namespace = typeRoot.namespaceDeclarations()[0];

完成此操作后,您可以使用名称空间语法来深入研究您的模型。

var impWith:String = typeRoot.ns::model.ns::implemented_with;

这可能有点冗长,因此您可以使用以下语法设置默认命名空间。我个人不喜欢这个,但它确实有效。

default xml namespace = ns;
var impWith:String = typeRoot.model.implemented_with;
default xml namespace = null;

一句简单的话就可以了。

var ns:Namespace = new Namespace("http://www.sitcom-project.org/sitcom");
var imp:String = _yourXML.em[0].ns::type.ns::model.ns::implemented_with;

使用默认语法

default xml namespace = new Namespace("http://www.sitcom-project.org/sitcom");
var imp:String = _yourXML.em[0].type.model.implemented_with;
default xml namespace = null;

希望这有帮助。

There are a couple ways to do this, but the best way is to use a namespace prefix before each dot access. In your case the first thing you want to do is to isolate the namespace. You can do this by hard coding the namespace into a new namespace object... ie;

var ns:Namespace = new Namespace( "http://www.sitcom-project.org/sitcom" );

Or a better way is to just extract it from the appropriate node. In the following code I am getting all the namespaces (as an array) declared on the type node, and just targeting the first one in the list. Because I don't know the namespace beforehand, I have to retrieve it using the children() method.

var emNode:XML = _yourXML.em[0];
var typeRoot:XML = emNode.children()[0]; 
var ns:Namespace = typeRoot.namespaceDeclarations()[0];

Once you have accomplished this, you can use namespace syntax to dig into your model.

var impWith:String = typeRoot.ns::model.ns::implemented_with;

This can be a little verbose, so you can set the default namespace using the following syntax. I don't like this personally, but it does work.

default xml namespace = ns;
var impWith:String = typeRoot.model.implemented_with;
default xml namespace = null;

A simple one-liner could be.

var ns:Namespace = new Namespace("http://www.sitcom-project.org/sitcom");
var imp:String = _yourXML.em[0].ns::type.ns::model.ns::implemented_with;

Using the default syntax

default xml namespace = new Namespace("http://www.sitcom-project.org/sitcom");
var imp:String = _yourXML.em[0].type.model.implemented_with;
default xml namespace = null;

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文