命名空间是一个容器,它为标识符提供上下文,其中名称是唯一的。
这主要是一个“良好的Python风格”的问题。 我有一个模块,它使用了许多感觉应该分组的常量。 假设我们有狗和猫,每只都有一些...
我正在使用自动加载来加载使用名称空间定义的文件。我在命名空间内定义了一个重定向函数: 我正在使用自动加载来加载使用名称空间定义的文件。我在命名空间内定义了一个重定向函数: <?php namespace sirJuni\Framework\Helper; function redirect($url) { header("Location: $url"); } ?> 项目结构如下: - sirJuni\ - src\ - Helper\ - Functions.php // where the function is defined 然后我想做的是使用自动加载来加载这个文件并使用重定向功能: <?php require_once "vendor/autoload.php"; use function sirJuni\Framework\Helper\redirect; redirect("hello/hi"); ?> 这给出了一个错误:调用未定义的函数 但是,如果我尝试使用上述项目中定义的其他类sirJuni我可以毫无问题地使用它们。仅当我尝试使用另一个命名空间中的函数时才会发生这种情况。 PHP 目前没有函数自动加载功能。您的 use 语句仅引用函数的命名空间名称。您仍然需要手动包含 Functions.php,以便可以在其中使用函数。
使用 SimpleXML 通过命名空间解析 XML [重复]
我将其作为xml: 我将此作为 xml: <root xmlns:event="http://www.webex.com/schemas/2002/06/service/event"> <event:event> <event:sessionKey></event:sessionKey> <event:sessionName>Learn QB in Minutes</event:sessionName> <event:sessionType>9</event:sessionType> <event:hostWebExID></event:hostWebExID> <event:startDate>02/12/2009</event:startDate> <event:endDate>02/12/2009</event:endDate> <event:timeZoneID>11</event:timeZoneID> <event:duration>30</event:duration> <event:description></event:description> <event:status>NOT_INPROGRESS</event:status> <event:panelists></event:panelists> <event:listStatus>PUBLIC</event:listStatus> </event:event> ... </root> 如何循环遍历所有 event:event 节点并显示,例如,所有 event:SessionKey 的? 这不起作用: $xml = new SimpleXMLElement($r); $xml->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event'); foreach($xml->xpath('//e:event') as $event) { var_export($event->xpath('//e:sessionKey')); } 它确实可以在没有 registerXPathNamespace 和 xpath 查询中的完整名称空间前缀的情况下工作: $xml = new SimpleXMLElement($r); foreach($xml->xpath('//event:event') as $event) { var_export($event->xpath('event:sessionKey')); } 您必须为您使用的每个 simpleXMLElement 对象注册名称空间。 $xml = new SimpleXMLElement($r); $xml->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event'); foreach($xml->xpath('//e:event') as $event) { $event->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event'); var_export($event->xpath('//e:sessionKey')); } 命名空间也应该在 xml 文件中的某个位置声明。 <event:event xmlns:event="http://www.webex.com/schemas/2002/06/service/event"> ... 所描述的方法 axe 也有效。如果您知道 xml 文件将始终使用相同的前缀,则可以跳过 registerXPathNamespace。 这是对我有用的替代方案。 $xml = simplexml_load_string($r); $ns = $xml->getNamespaces(true); foreach ($xml->children($ns['event'])->event as $skey) { $sessionKey = $skey->children($ns['event'])->sessionKey; echo $sessionKey; } 我在 simplexml 上做了很多工作,这就是我的做法。 如果您已经有一个元素并且只想获取其不同的命名空间子元素,那么魔术技巧如下: <entry> <title type="text">My test entry</title> <gd:when startTime="2017-02-26T02:00:00Z" endTime="2017-02-26T03:00:00Z"/> <gc:notes type="string">A type</gc:notes> </entry> 就是将TRUE作为第二个参数发送给children函数: $title = (string) $entry->title; $gd = $entry->children('gd', TRUE); $attrs = $gd->when->attributes(); $startTime = (string) $attrs->startTime; $gc = $entry->children('gc', TRUE); $notes = (string) $gc->notes(); 另一种方法是使用 SimpleXML 进行解析,使用 DOMDocument 进行操作/访问,这完全绕过了命名空间问题: $xml = new SimpleXMLElement($r); $xml = dom_import_simplexml($xml); $nodelist= $xml->getElementsByTagName('event'); for($i = 0; $i < $nodelist->length; $i++) { $sessions = $nodelist->item($i)->getElementsByTagName('sessionKey'); echo $sessions->item(0)->nodeValue; } 使用registerXPathNamespace然后调用xpath实际上对我不起作用。 我必须采用这篇精彩文章中提供的解决方案:http://blog.preinheimer.com/index.php?/archives/172-SimpleXML,-Namespaces-Hair-loss.html 所以在你的情况下,这个: echo $xml->children('http://www.webex.com/schemas/2002/06/service/event')->sessionName; 将输出: 几分钟内学会QB
我只是有一点好奇心。我正在使用 SSRS 并调用它的 SOAP 方法。我已经生成了存根/创建了 Web 引用,一切正常,我可以进行 Web 服务调用...
我只是有一点好奇心。我正在使用 SSRS 并调用它的 SOAP 方法。我已经生成了存根/创建了 Web 引用,一切正常,我可以进行 Web 服务调用...
如何让 Composer PSR-4 自动加载器自动加载扩展至自动加载的类的类?
错误信息 致命错误:未捕获错误:在 C:\xampp\htdocs\Simple_App\src\Controllers\LoginController.php:7 中找不到类“Core\Controller” 堆栈跟踪:#0 C:\xampp\htdocs\Simple_App...
使用 Apache poi 在 android studio 中出现 xlsx 文件错误
与该错误可以连接:org.apache.poi.ooxml.POIXMLException:错误:启用“命名空间”功能时不支持“命名空间前缀”功能。 ? 我只是想尝试
我对特质很陌生,但我想尝试一下。但是,它似乎没有加载。 我在 Laravel 应用程序目录下的文件夹中创建了一个名为 CheckPermsAgainstObjectTra...
为什么参数相关的查找对 std::make_tuple 不起作用?
这里可以写 tie 而不是 std::tie ,因为依赖于参数的查找: std::tuple tup = std::make_tuple(1, "a"); 整数我; std::str...
我正在尝试完成初学者计算机科学作业。我们刚刚学习空间分配和使用标头,以及动态内存分配。要求之一是我们...
我的设置有 2 个 DNS 服务器 dns3-master 和 dns4-slave,在该设置中我能够在成熟的站点上添加反向委派,然后我们又添加了一个 dns 服务器,并将其设为 dns5-slav ...
org.eclipse.rdf4j.rio.RDFWriter,编写文档时如何设置基础命名空间
我正在使用 rdf4j 库导出 xml 文件。 我使用 org.eclipse.rdf4j.rio.RDFWriter 将其保存在文件中,我需要定义基本命名空间。所以我希望有类似的东西: 我正在使用 rdf4j 库导出 xml 文件。 我使用 org.eclipse.rdf4j.rio.RDFWriter 将其保存在文件中,我需要定义基本命名空间。所以我希望有类似的东西: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xml:base="http://exmaple.org/"> <rdf:Description rdf:about=foo> <rdf:type rdf:resource= FOO> ... 我知道我可以使用handleNamespace()设置命名空间。但我不知道如何使用它来设置基本命名空间:我尝试过: ModelBuilder builder = new ModelBuilder(); ValueFactory vf = SimpleValueFactory.getInstance(); builder.add(vf.createIRI("base:foo"), RDFS.ISDEFINEDBY, vf.createIRI("base:FOO"); Model model = builder.build(); RDFWriter writer = Rio.createWriter(RDFFormat.RDFXML, someOutputStream); try { writer.startRDF(); writer.handleNamespace("base", "http://exmaple.org/"); for (Statement st: model) { writer.handleStatement(st); } writer.endRDF(); ... 但这并没有给我我所期望的: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:base="http://exmaple.org/"> <rdf:Description rdf:about=base:foo> <rdf:type rdf:resource= base:FOO> 有什么想法吗? 命名空间与基本 URI 不同,并且不存在“基本命名空间”这样的东西。命名空间是 URI 的缩写机制,您可以在其中定义一个前缀,用短字符串替换完整 URI 的第一部分,以便在 RDF 数据中可以用“前缀名称”(取决于特定的 RDF 语法)表示 URI到底是什么样子的)。 另一方面,基础 URI 是一种通用解析器/编写器机制,允许解析数据中的“相对 URI”。某些语法格式(如 XML)允许在文档本身中定义基本 URI,而其他格式则不允许,但它们的用途与命名空间不同。 举个例子,这个 XML 片段: <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:base="http://example.org/"> <rdf:Description rdf:about="foo"> .... 是合法的 RDF,尽管 RDF 规范要求 rdf:about 属性(subject)的值是完整的 URI。它合法的原因是定义了一个基本 URI,字符串 foo 可以解析为相对 URI。解析后的完整 URI 将为 http://example.org/foo。请注意,这与命名空间“无关”。 您的代码中发生的情况是您根本没有使用基本 URI。在第一部分中,您将使用 ModelBuilder 在内存中定义 RDF 模型。您正在添加字符串 base:foo 作为主题。 ModelBuilder 将此解释为完整 URI,因为模型构建器中没有定义以 base 作为前缀的命名空间。 将该模型写入 XML 文件并不会改变这一点,无论您将什么定义为基本 URI 或命名空间在写入时:您正在导出将 base:foo 作为完整 URI 的 RDF 模型,因此这就是您将得到的结果在你的输出中。 要获得所需的内容,您需要确保您的 Model 对象具有完整的 URI,并且不要尝试向编写器添加命名空间,而是在 创建 编写器时设置其基本 URI。 var model = new ModelBuilder().add("http://example.org/foo", RDFS.ISDEFINEDBY, "http://example.org/FOO").build(); var writer = Rio.createWriter(RDFFormat.RDFXML, System.out, "http://example.org/"); writer.startRDF(); for (Statement st : model) { writer.handleStatement(st); } writer.endRDF(); ...或更简洁地说: var model = new ModelBuilder().add("http://example.org/foo", RDFS.ISDEFINEDBY, "http://example.org/FOO").build(); Rio.write(model, System.out, "http://example.org/", RDFFormat.RDFXML); 如果您不喜欢每次创建模型时都必须编写完整的 URI,那么命名空间就可以派上用场,例如: var model = new ModelBuilder().setNamespace("ex", "http://example.org/") .add("ex:foo", RDFS.ISDEFINEDBY, "ex:FOO").build();
我需要编写与多个版本的ansible兼容的ansible代码。旧版本的 ansible 没有命名空间,而新版本有。在一个实例中,一个角色调用了“ansible.buil...
在 pod 触发 kubectl exec 命令后,如何查找以退出代码 137 错误终止的命令的日志
我的 pod 已创建,并且在 pod 中执行以下命令时,有时会出现错误,因为命令以退出代码 137 终止 kubectl exec gradlecommandfromcommandline -- ./gradlew gadlingRun-
Symfony 4 未在生产中构建:尝试从命名空间加载类“WebProfilerBundle”
Symfony 4 在开发模式下构建,但在生产模式下不构建,同时产生错误: 尝试从命名空间加载类“WebProfilerBundle”。 WebProfilerBundle 确实已安装,但...
加载 dyplyr 和 tidyverse 时,namespaceExport(ns,exports)出现错误
我是 R 新手。我使用的是 4.0.2 版(Windows),它运行良好,直到我尝试使用“dplyr”和“tidyverse”包。我可以下载这两个软件包,但是当我...
单元测试的一个特殊问题。我的许多测试函数具有以下结构: def test_xxx(): 尝试: # 做一点事 变量1 = ... 变量2 = ... 除了
我正在尝试使用java将xml转换为json,然后在修改后将json转换回xml,这应该给出相同的xml。 xml 属性具有命名空间。 我的示例 xml: 我正在尝试使用java将xml转换为json,然后在修改后将json转换回xml,这应该给出相同的xml。 xml 属性具有命名空间。 我的示例 xml : <?xml version="1.0" encoding="UTF-8"?> <ns2:testplan xmlns:ns2="http://jazz.net/xmlns/alm/qm/v0.1/" xmlns:ns1="http://schema.ibm.com/vega/2008/" xmlns:ns3="http://purl.org/dc/elements/1.1/" xmlns:ns4="http://jazz.net/xmlns/prod/jazz/process/0.6/" xmlns:ns5="http://jazz.net/xmlns/alm/v0.1/" xmlns:ns6="http://purl.org/dc/terms/" xmlns:ns7="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ns8="http://jazz.net/xmlns/alm/qm/v0.1/testscript/v0.1/" xmlns:ns9="http://jazz.net/xmlns/alm/qm/v0.1/executionworkitem/v0.1" xmlns:ns10="http://open-services.net/ns/core#" xmlns:ns11="http://open-services.net/ns/qm#" xmlns:ns12="http://jazz.net/xmlns/prod/jazz/rqm/process/1.0/" xmlns:ns13="http://www.w3.org/2002/07/owl#" xmlns:ns14="http://jazz.net/xmlns/alm/qm/qmadapter/v0.1" xmlns:ns15="http://jazz.net/xmlns/alm/qm/qmadapter/task/v0.1" xmlns:ns16="http://jazz.net/xmlns/alm/qm/v0.1/executionresult/v0.1" xmlns:ns17="http://jazz.net/xmlns/alm/qm/v0.1/catalog/v0.1" xmlns:ns18="http://jazz.net/xmlns/alm/qm/v0.1/tsl/v0.1/" xmlns:ns20="http://jazz.net/xmlns/alm/qm/styleinfo/v0.1/" xmlns:ns21="http://www.w3.org/1999/XSL/Transform"> <ns2:projectArea href="https://testserver:9080/qm/resource/itemOid/com.ibm.team.process.ProjectArea/_xv6jsJceEeimRT_G_Q" alias="projectArea"/> <ns3:identifier>https://testserver:9080/qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/projectArea/testplan/urn:com.ibm.rqm:testplan:70?revision=294</ns3:identifier> <ns2:stylesheet href="https://testserver:9080/qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/projectArea/testplan/urn:com.ibm.rqm:testplan:70?stylesheet=true"/> <ns2:snapshot> <ns3:title>testplan_70_<Reason>_<Version>_on_16 Apr 2019 05:50</ns3:title> <ns5:updated>2019-04-16T12:20:01.644Z</ns5:updated> <ns2:revision>294</ns2:revision> </ns2:snapshot> <ns2:webId>70</ns2:webId> <ns3:title>Demo test plan 06</ns3:title> <ns3:description/> <ns2:creationDate>2019-01-22T10:36:40.289Z</ns2:creationDate> <ns5:updated>2019-04-16T12:20:01.644Z</ns5:updated> <ns5:state ns7:resource="https://testserver:9080/qm/service/com.ibm.rqm.integration.service.IIntegrationService/process-info/_xv6jsJceEeRT_G_Q/workflowstate/com.ibm.rqm.process.testplan.workflow/com.ibm.rqm.planning.common.underreview">com.ibm.rqm.planning.common.underreview</ns5:state> <ns3:creator ns7:resource="https://testserver:9080/jts/resource/itemName/com.ibm.team.repository.Contributor/ABB">abc</ns3:creator> <ns5:owner>unassigned</ns5:owner> <ns2:priority ns7:resource="https://testserver:9080/qm/service/com.ibm.rqm.integration.service.IIntegrationService/process-info/_xv6jsJceEeimbPqQ/priority/literal.priority.101">literal.priority.101</ns2:priority> <ns2:locked>false</ns2:locked> <ns2:component href="https://testserver:9080/qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/projectArea/component/_yzQ3EZcmbPqnRT_G_Q"/> </ns2:testplan> 有人可以帮我使用java进行转换吗? 我尝试使用 org.json.XML 进行转换,但它没有提供具有命名空间的 jsonobject 键/值的正确 json。 我尝试过但没有给出回应的代码: JSONObject jsonObject = XML.toJSONObject("xml"); 我期望一种转换方式,为 Json 提供正确的格式和具有命名空间的 json 对象,如果我隐藏此 json,它应该给出初始 xml 请帮助我。 您可以尝试 jackson 的 XmlMapper (com.fasterxml.jackson.dataformat.xml.XmlMapper) XmlMapper xmlMapper = new XmlMapper(); JsonNode jsonNode = xmlMapper.readTree(string.getBytes()); ObjectMapper objectMapper = new ObjectMapper(); String value = objectMapper.writeValueAsString(jsonNode); 编辑:我使用过的依赖项 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.0</version> </dependency> 这个问题有点老了,但我想分享我最近完成的同一任务的答案! 要求是: 有了这个 xml: <ns2:testplan> <ns2:snapshot> <ns2:revision>294</ns2:revision> </ns2:snapshot> <ns2:webId>70</ns2:webId> <ns2:title>Demo test plan 06</ns2:title> </ns2:testplan> 我们想将其转换为: { "ns2:testplan": { "ns2:snapshot": { "ns2:revision": 294 }, "ns2:title": "Demo test plan 06", "ns2:webId": 70 } } 请注意,对于接受的响应,根标签 <ns2:testplan> 和命名空间前缀不包含在 JSON 中。 要配置 XmlMapper 以保留命名空间并添加根标签,请按以下步骤操作: var module = new SimpleModule().addDeserializer(JsonNode.class, new JsonNodeDeserializer() { @Override public JsonNode deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { return ctxt.getNodeFactory() .objectNode() .set("ns2:testplan", super.deserialize(p, ctxt)); // this config adds the root tag } }); XMLInputFactory xmlInputFactory = new WstxInputFactory(); xmlInputFactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); // this one keeps the namespace prefix XmlMapper xmlMapper = new XmlMapper(new XmlFactory(xmlInputFactory, new WstxOutputFactory())); xmlMapper.registerModule(module); 然后使用接受的答案的代码将 XML 转换为 JSON。 获取JSONObject并将其转换为JSON字符串: JSONObject jsonObject = XML.toJSONObject("xml"); String jsonString = jsonObject.toString(); 如果你想漂亮地打印字符串,请使用 toString(int),它将空格数作为参数。 String prettyPrintedJson = jsonObject.toString(4);
闪亮模块的命名空间('ns')问题:CheckboxInput 的行为不符合预期
在我提供的模块外部示例中,一切顺利。但是,当我尝试将命名空间(ns)添加到模块内的复选框时,它似乎会引起问题。我需要创建一个模块...