【问题标题】:BizTalk - Putting a namespace on an attribute?BizTalk - 将命名空间放在属性上?
【发布时间】:2023-03-19 00:29:01
【问题描述】:

参考这个使用“json:Array”的例子:Converting between JSON and XML

我想要 BizTalk 架构,它会像这样构建 XML 元素:

  <role json:Array='true'>Admin</role>

我尝试在我的项目中添加一个名为 FakeJSONArraySchema.xsd 的架构,然后在我的主架构上,我做了一个“导入”。使用“导入”的正常方法是创建一个“子记录”,然后将其更改为“数据结构类型”。但是将该“子记录”设置为引用模式的根元素。我只需要一个属性。

在上面的示例中,元素“role”需要位于主模式的命名空间中。

如果一切都失败了,我会尝试直接编辑 .XSD。我希望这可以使用 Visual Studio 图形界面来完成。

查看相关问题:Details about the json:Array feature of Newtonsoft.JSON XML to JSON converter

【问题讨论】:

  • 我有点不清楚您要做什么,但是要强制属性的命名空间,您可以在 xsd 的架构标记中设置 attributeFormDefault="qualified" 或在 标签(xsd 也需要有一个目标命名空间)。

标签: json xml xsd biztalk biztalk-2010


【解决方案1】:

正如 Sprotty 在他的评论中所说,将 Attribute FormDefault 或 Attribute Field Form 设置为 Qualified 以获得属性的命名空间前缀。

设置了 FormDefault 的示例架构。

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://james.newtonking.com/projects/json" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="qualified" targetNamespace="http://james.newtonking.com/projects/json" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Role">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="Array" type="xs:boolean" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

但是它不会使命名空间前缀 JSON,而只是默认的 NS0。但是,只要它引用正确的命名空间,这应该无关紧要。

<ns0:Root xmlns:ns0="http://james.newtonking.com/projects/json">
  <Role ns0:Array="true">Role_0</Role>
</ns0:Root>

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2017-07-16
    相关资源
    最近更新 更多