天道酬勤,学无止境

How to change the value of an attribute in an XML document?

I have an XML document below and there is a tag called <FormData> in side this tag it as an attribute called FormId="d617a5e8-b49b-4640-9734-bc7a2bf05691"

I would like to change that value in C# code?

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(MapPath(tempFolderPathAlt + "dvforms" + "\\XmlDataTemplate.xml"));
    //Change value of FormID
    xmlDoc.Save(tempFolderPath + "data.xml");

Be is my XML document:

<?xml version="1.0"?>
<FormData Platform="Android" PlatformVersion="100" Version="966" DataVersion="1" Description="Investec - Res" FormId="d617a5e8-b49b-4640-9734-bc7a2bf05691" FileId="e6202ba2-3658-4d8e-836a-2eb4902d441d" EncryptionVerification="" CreatedBy="Bob" EditedBy="Bob">
<FieldData>
<request_details_export_template Mod="20010101010101" IncludeInPDFExport="Yes"></request_details_export_template>
<request_details_reason_for_valuatio Mod="20010101010101" IncludeInPDFExport="Yes"></request_details_reason_for_valuatio>
</FieldData>
<Photos Mod="20010101010101"/>
<VoiceNotes/>
<Drawings Mod="20010101010101"/>
<FieldNotes/>
</FormData>
标签

评论

There are several ways of doing this, including:

XmlAttribute formId = (XmlAttribute)xmlDoc.SelectSingleNode("//FormData/@FormId");
if (formId != null)
{
    formId.Value = "newValue"; // Set to new value.
}

Or this:

XmlElement formData = (XmlElement)xmlDoc.SelectSingleNode("//FormData");
if (formData != null)
{
    formData.SetAttribute("FormId", "newValue"); // Set to new value.
}

The SelectSingleNode method uses XPath to find the node; there is a good tutorial about XPath here. Using SetAttribute means the FormId attribute will be created if it does not already exist, or updated if it does already exist.

In this case, FormData happens to be the document's root element, so you can also do this:

xmlDoc.DocumentElement.SetAttribute("FormId", "newValue"); // Set to new value.

This last example will only work where the node you are changing happens to be the root element in the document.

To match a specific FormId guid (it is not clear if this is what you wanted):

XmlElement formData = (XmlElement)xmlDoc.SelectSingleNode("//FormData[@FormId='d617a5e8-b49b-4640-9734-bc7a2bf05691']");
if (formData != null)
{
    formData.SetAttribute("FormId", "newValue"); // Set to new value.
}

Note that the select in this last example returns the FormData element and not the FormId attribute; the expression in [] brackets enables us to search for a node with a particular matching attribute.

To select the right node use following XPath //Node[@Attribute='value'].

In your case the missing piece of code could look like:

var formId = "d617a5e8-b49b-4640-9734-bc7a2bf05691";
var newId = "[set value here]";

var xpath = String.Format("//FormData[@FormId='{0}']", formId);

XmlNode node = xmlDoc.SelectSingleNode(xpath);

if(node != null)
{
    node.Attributes["FormId"].Value = newId;
}

See XPath reference or check this tutorial.

Or you could walk the tree explicitly:

xmlDoc.DocumentElement.GetAttribute("FormId").Value = "";

You can use SetAttribute method http://msdn.microsoft.com/en-us/library/system.xml.xmlelement.setattribute.aspx

XDocument doc = XDocument.Load(m_pFileName);                 
XElement xElemAgent = doc.Descendants("TRAINEE")
.Where(arg => arg.Attribute("TRAINEEID").Value == m_pTraineeID.ToString()).Single(); 
xElemAgent.SetAttributeValue("FIRSTNAME",m_pFirstName);
xElemAgent.SetAttributeValue("LASTNAME", m_pLastName);
xElemAgent.SetAttributeValue("DOB",m_pDOB);
xElemAgent.SetAttributeValue("UNIQUEID",m_pUniqueID);
doc.Save(m_pFileName);

the best way is to create a function that can be reused anywhere you like:

public void ReplaceXMLAttributeValueByIndex(string fullFilePath, string nodeName, int index, string valueToAdd)
    {
        FileInfo fileInfo = new FileInfo(fullFilePath);
        fileInfo.IsReadOnly = false;
        fileInfo.Refresh();

        XmlDocument xmldoc = new XmlDocument();
        xmldoc.Load(fullFilePath);
        try
        {
            XmlNode node = xmldoc.SelectSingleNode(nodeName);
            node.Attributes[index].Value = valueToAdd;
        }
        catch (Exception ex) 
        {
            //add code to see the error
        }
        xmldoc.Save(fullFilePath);
    }

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 更改属性值而不创建新的输出文档?(Change attribute value without creating new output document?)
    问题 我需要遍历一堆 XML 文档并使用 XSLT 2.0 简单地更改一个属性的值。 文档的其余部分以及文档名称需要相同。 是否可以简单地更改现有文档而不创建新文档作为转换的输出? 或者我是否需要复制文档、更改属性并将它们命名为与原始文档相同的名称? 编辑 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:fn='http://www.w3.org/2005/xpath-functions' exclude-result-prefixes='xsl xs fn' xmlns:h="http://java.sun.com/jsf/html"> <xsl:output method="xml" encoding="utf-8"/> <xsl:strip-space elements="*"/> <xsl:param name="files" select="collection('./output?select=*.html')"/> <xsl:template match="/"> <xsl:for
  • 将 XML 文件与更改列表合并(Merging an XML file with a list of changes)
    问题 我有两个由我无法控制的另一个应用程序生成的 XML 文件。 第一个是设置文件,第二个是应该应用于第一个的更改列表。 主要设置文件: <?xml version="1.0"?> <preset> <var id="9" opt="0" val="6666666"/> <var id="9" opt="1" val="10000000"/> <var id="9" opt="2" val="10000000"/> <var id="9" opt="3" val="10000000"/> <var id="9" opt="4" val="0"/> <var id="10" opt="0" val="4"/> <var id="11" opt="0" val="0"/> <var id="15" opt="0" val="75"/> <var id="22" opt="0" val="0,0,127,516" type="rect(l,t,r,b)"/> <var id="23" opt="0" val="27,18,92,66" type="rect(l,t,r,b)"/> <var id="24" opt="0" val="320"/> ... Skip 300 lines ... </preset> 这是更改的示例: <?xml version="1.0"?> <preset>
  • 如何查找和替换 XML 中的属性值(How to find and replace an attribute value in a XML)
    问题 我正在用 Java 构建一个“XML 扫描器”,它可以找到以“!Here:”开头的属性值。 属性值包含稍后替换的说明。 例如我有这个 xml 文件充满了像 <bean value="!Here:Sring:HashKey"></bean> 只有知道它以"!Here:"开头,我才能找到和替换属性值? 回答1 为了修改 XML 文件中的某些元素或属性值,同时仍然尊重 XML 结构,您将需要使用 XML 解析器。 它比String$replace()更复杂...... 给出一个示例 XML,如: <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="exampleBean" class="examples.ExampleBean"> <!-- setter injection using --> <property name="beanTwo" ref="anotherBean"/> <property name="integerProperty" value="!Here:Integer:Foo"/> </bean> <bean id="anotherBean" class="examples.AnotherBean"> <property name="stringProperty" value="!Here
  • 如何注释XML标记内的属性?(How do I comment attributes inside an XML tag?)
    问题 是否可以在XML标记内注释一个或几个属性? 来自C的/* */类的东西。 我尝试使用<!-- --> ,但未成功。 <element attribute1="value1" attribute2="value2" <!-- attribute3="value3" (commented value) --> > 回答1 不,这是不可能的。 XML开放标记中不允许注释。 根据您的应用程序,您可以通过在属性名称前加上“ _”作为前缀来“注释掉”属性,也可以不这样做(如果XML是根据架构进行验证的,或者已解析了所有属性)。 因为允许使用空格,并且大多数编辑器都支持行操作,所以您可以通过以下方式轻松地“注释”多个属性: <element _attr1="value1" _attr2="value2" _attr3="value3" > 但是这些属性仍然是文档的一部分。 回答2 唯一兼容的方法是创建一个没有相关属性的节点。 我经常使用这种方法: <div> <!-- This opening div tag replaces the one above. <div my-attribute="my-value"> --> div contents here... </div> 用于澄清什么是注释掉的open标签的注释取决于您的需要(使用此代码的同事等)。 然后,当您需要移动时
  • 使用perl的XML :: LibXML如何使用XML前缀而不是xmlns属性?(Using perl's XML::LibXML how do you use XML Prefixes and not xmlns attributes?)
    问题 我相信这个问题以前可能是在2006年在其他站点上尝试过的。 但是,我当前的XML / RDF XML::LibXML ( XML::LibXML 1.70)以xmlns属性的形式输出元素名称空间。 这将排除使用不了解名称空间的解析器的人,他们只是对foaf:Person进行look_down。 我想知道是否有人首先使用XML::LibXML在perl中实现这一目标的简单方法。 或通过其他方式。 像这样的节点: <Person xmlns="http://xmlns.com/foaf/0.1/" rdf:ID="me"/> 和这个: <name xmlns="http://xmlns.com/foaf/0.1/">Evan Carroll</name> 应该真的看起来像: <foaf:Person rdf:ID="me"/> <foaf:name>Evan Carroll</name> 有任何想法吗? 我相信这两种方法在技术上都是正确的,但我宁愿不依赖其他人知道这一点。 我昨天自己不知道。 回答1 简短的答案是,如果您已经有一个namespaceURI和声明的前缀,则可以指定限定名称(即prefix:localName)作为元素名称,这将使XML :: LibXML避免重新声明该命名空间。 因此,修改最后一个问题中的代码将得到以下内容,该代码确实使用了所需的名称空间前缀: #
  • 如何使用Java获取xml节点的属性值(how to get the attribute value of an xml node using java)
    问题 我有一个看起来像这样的xml: { <xml><ep><source type="xml">...</source><source type="text">..</source></ep></xml>} 在这里,我想检索类型为属性的“源类型”的值。 我曾这样尝试过,但无法正常工作: DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("D:/workspace1/ereader/src/main/webapp/configurations/config.xml"); System.out.println(dDoc); XPath xPath = XPathFactory.newInstance().newXPath(); Node node = (Node) xPath.evaluate("//xml/source/@type/text()", dDoc, XPathConstants.NODE); System.out.println(node); } catch (Exception e)
  • 升级到java7u25后出现XML dig sig错误(XML dig sig error after upgrade to java7u25)
    问题 我有一个用于签署XML文档的Java应用程序。 将Java升级到最新版本(Java7u25)后,它将停止工作。 我收到以下错误: javax.xml.crypto.dsig.XMLSignatureException: javax.xml.crypto.URIReferenceException: com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverException: Cannot resolve element with ID ... 恢复为java7u21可以解决此问题。 XML Dig Sig API中是否有任何导致此错误的更改? 回答1 同样的问题在这里。 由于不断发展,似乎是JVM内部的一个错误。 我将其追溯到com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment 在Java 7u21及之前的版本中: 91: // Element selectedElem = doc.getElementById(id); 92: selectedElem = IdResolver.getElementById(doc, id); 在Java 7u25中: 87
  • 从头开始构建 xml 树 - pugixml C++(Build an xml tree from scratch - pugixml C++)
    问题 首先,我想说我一直在使用 Frank Vanden Berghen 编写的 XML 解析器,最近尝试迁移到 Pugixml。 我发现过渡有点困难。 希望能在这里得到一些帮助。 问题:如何使用 pugixml API 从头开始​​为下面的小 xml 构建树? 我尝试查看 pugixml 主页上的示例,但其中大多数都是使用根节点值进行硬编码的。 我的意思是 if (!doc.load("<node id='123'>text</node><!-- comment -->", pugi::parse_default | pugi::parse_comments)) return -1; 是硬编码的。 此外,我尝试阅读有关 xml_document 和 xml_node 的文档,但如果我必须从头开始构建树,我无法弄清楚如何开始。 #include "pugixml.hpp" #include <string.h> #include <iostream> int main() { pugi::xml_document doc; if (!doc.load("<node id='123'>text</node><!-- comment -->", pugi::parse_default | pugi::parse_comments)) return -1; //[code_modify
  • Build an xml tree from scratch - pugixml C++
    Firstly I would like to say that I have been using an XML parser written by Frank Vanden Berghen and recently trying to migrate to Pugixml. I am finding the transition bit difficult. Hoping to get some help here. Question: How can I build a tree from scratch for the small xml below using pugixml APIs? I tried looking into the examples on the pugixml home page, but most of them are hard coded with root node values. what I mean is if (!doc.load("<node id='123'>text</node><!-- comment -->", pugi::parse_default | pugi::parse_comments)) return -1; is hard-coded. Also I tried reading about xml
  • JavaWeb学习笔记(XML语言)
    知识点总结于崔希凡+王泽(广陵散)的JavaWeb视频教程,侵权请联系删除。 XML XML简介XML的应用XML常见应用 XML的语法规则文档声明元素(标签)定义属性定义注释特殊字符CDATA区 处理指令小结 XML约束概述DTD约束使用DTD定义元素使用DTD定义属性定义实体 Schema约束XMLSchema文档基本结构XMLSchema简易元素和复杂元素XMLSchema复杂元素指示器约束属性 对XML Schema的引用名称空间的概念使用名称空间引入Schema 示例 XML 简介 XML(eXtensible Markup Language): 指可扩展标记语言 标记型语言:html是标记型语言,XML也是使用标签来操作的可扩展:html里面的标签是固定,每个标签都有特定的含义例如:<h1> <br/> <hr/>,但是XML标签可以自己定义,可以写中文的标签 例如:<person></person>、<猫></猫> XML标签没有被预定义,需要用户自行定义标签。XML的用途:XML 被设计用来传输和存储数据(XML也可显示数据,但不是主要功能)。XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。 xml有两个版本:1.0 1.1 使用都是1.0版本,(1
  • How can I get the href attribute value out of an <?xml-stylesheet> node?
    We are getting an XML document from a vendor that we need to perform an XSL transform on using their stylesheet so that we can convert the resulting HTML to a PDF. The actual stylesheet is referenced in an href attribute of the ?xml-stylesheet definition in the XML document. Is there any way that I can get that URL out using C#? I don't trust the vendor not to change the URL and obviously don't want to hardcode it. The start of the XML file with the full ?xml-stylesheet element looks like this: <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="http://www.fakeurl.com
  • 引用 XML 中的另一个元素(Referring to another element in XML)
    问题 我正在尝试为我的应用程序设计一个 XML 文档结构。 我想存储一个像下面这样的孔列表 <Holes> <Hole id='1' dia='0.1' depth='2'/> <Hole id='2' dia='0.2' depth='1.67'/> <Hole id='3' dia='0.3' depth='0.44'/> </Holes> 在我文档的另一部分中,我想通过 id 来引用一个洞。 例如 <Drill useHoleWithId='1'/> 当我的代码在 <Drill> 元素上方找到时,我希望它在 id='1' 的 <Hole> 元素中检索 'dia' 和 'depth' 属性的值。 当然,我可以搜索 id 等于 'useHoleWithId' 值的 <Hole> 元素,然后获取属性的值,但我想也许有更好的方法来使用一些 XML 技巧来做到这一点。 有没有? PS - 虽然我对它们一无所知,但 XPath、XLink、XQuery 或 XPointer 中的任何一个都可能有所帮助。 回答1 XPath 当然是一种方法。 查找 ID 为 1 的保持的 Xpath 查询类似于Holes/Hole[@id="1"] 回答2 有一个标准的 XPath 函数可以通过“id”属性来引用元素。 来自 XPath 1.0 规范: id()函数通过元素的唯一ID选择元素(参见 [5
  • 如何在 Web 服务更新消息 (DTO) 中使用可选属性?(How to use optional attributes in web service update messages (DTOs)?)
    问题 背景 假设您有一个 (SOAP) Web 服务BookService管理图书馆中的书籍。 在信息模型中,假设Book实体具有以下属性: id author publisher title shelfId 为了操作数据,定义了四个 Web 服务操作: AddBook GetBook UpdateBook DeleteBook 为每个操作定义请求和响应消息。 但是,更新消息 XML 模式的设计更为复杂。 我们希望达到以下品质: R1:重置/删除属性先前值的可能性。 例如,假设您不再将这本书保留在图书馆中,因此想要重置/清空/删除该特定书籍的属性shelfId的属性值。 R2:避免 Web 服务中的闲聊。 请参阅反模式聊天服务。 R3:为并发控制和乐观锁的未来需求做好准备。 我们可能希望最小化(或消除)基于旧信息进行更新的风险。 设计方案 我看到了三个市长替代方案,其中一个有几个子选项来设计更新消息: 发送整个业务文档。 被<shelfId xsi:nil="true"/>元素(在架构中有minOccurs="0" )或元素显式设置为 null,即<shelfId xsi:nil="true"/> ,将被解释为删除先前的值。 突出显示更改或仅发送差异。 发送整个业务文档,但使用特定于此目的的属性标记修改后的元素。 示例: <author dirty="true">Hemingway
  • 如何更改 DOM 中每个节点上的命名空间?(How can I change the namespace on every node in a DOM?)
    问题 给定 w3c DOM(特别是 Java 的默认实现),我如何更改该 DOM 中每个元素/属性/节点的命名空间? 有效,最好。 DOM 上好像没有 setNamespaceURI 方法,不方便。 我尝试过 XSL 方法,但它们在 JAXP 转换器中无法工作(尽管它们在 Saxon9B 中工作正常,但由于其他各种原因我无法使用)。 基本上,我需要一个纯核心 java 解决方案,它允许我获取一个文档并更改其命名空间。 回答1 根据我非常有偏见的观点,你想要的将是一个巨大的痛苦。 我已经可以看到可靠地执行此操作所需的类型转换地狱和大量递归 for 循环! 啊,Java 的默认实现,我多么讨厌你的 NPE:s 在内部,反向逻辑,简单操作所需的额外步骤! 所以是的,我的建议是递归循环,对每个可能的节点类型进行类型转换,根据我个人的经验,Java 的默认实现非常糟糕。 回答2 这在命名空间感知 DOM 上效率不高。 您必须在要更改其命名空间的每个后代元素上使用 DOM 级别 3 核心方法 Document.renameNode (javadoc)。 (您通常不需要更改这么多 Attr 节点,因为没有前缀的 Attr 节点的命名空间始终为空,而不是 Element 的命名空间。) 如果您只想用一个命名空间替换另一个命名空间,那么使用命名空间未知 DOM 可能会更快,并且只需更改相关的
  • 从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性(Select specific xml node from xmlDocument then change xml node's attribute)
    问题 我在 C# 中的 xml 文档中有一个简单的 xml 节点,我想查询它,然后将可见属性的值设置为 false。 下面是xml。 我需要能够通过节点名称(DGField)和 text_id(Test.ChangeRank)来选择节点。 有谁知道如何做到这一点? 提前致谢。 <DGField text_id="Test.ChangeRank" template="Ranking" visible="true"> 回答1 假设您的 XmlDocument 被称为 doc,那么以下应该可以工作。 XmlNode node = doc.SelectSingleNode("//DGField[@text_id='Test.ChangeRank']"); if (node != null) { node.Attributes["visible"].Value = "false"; } 这可以通过更多的错误检查来确保被更改的属性存在等,但这可以保持干净。 基本上,第一行使用 XPath 表达式来定位 text_id='Test.ChangeRank' 的 DGField 元素。 如果找到,则返回节点,然后用于操作所需的属性值。 我在 XPath 查询中使用了 '//' 语法,以便搜索整个 Xml 文档,这不是最优的,更具体的 XPath 可以更好地执行。 例如
  • 使用 XML 架构创建具有 1 个以上子元素的 XML 文档(Creating an XML document with more than 1 child element with XML schema)
    问题 我附带了一个 xml 架构来创建一个 xml 文档。 根节点是电影。 现在这个根元素有子元素叫做电影,它包含字符串类型的其他元素,每个电影也有大约三四个属性。 但是,在将我的 XML 文档与模式链接后,我只能创建一个电影节点,仅此而已。 这是我的 xml 架构: <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--root element movies --> <xsd:element name="movies"> <xsd:complexType > <xsd:all > <xsd:element name="movie"> <xsd:complexType > <xsd:sequence> <!--Elements under each movie--> <xsd:element name="title" type="xsd:string"/> <xsd:element name="writer" type="xsd:string"/> <xsd:element name="producer" type="xsd:string"/> <xsd:element name="director" type="xsd:string"
  • 如何为C#XML序列化添加属性(How to add attributes for C# XML Serialization)
    问题 我在序列化和对象方面遇到问题,我可以让它创建所有正确的输出,除了我有需要值和属性的Element的地方。 这是必需的输出: <Root> <Method>Retrieve</Method> <Options> <Filter> <Times> <TimeFrom>2009-06-17</TimeFrom> </Times> <Document type="word">document name</Document> </Filter> </Options> </AdCourierAPI> 我可以构建所有文件,但找不到设置Document type属性的方法,这是对象类的一部分 [XmlRoot("Root"), Serializable] public class Root { [XmlElement("Method")] public string method="RetrieveApplications"; [XmlElement("Options")] public _Options Options; } public class _Options { [XmlElement("Filter")] public _Filter Filter; } public class _Filter { [XmlElement("Times")] public _Times
  • 有没有更简单的方法来解析Java中的XML?(Is there an easier way to parse XML in Java?)
    问题 我正在尝试弄清楚如何解析一些XML(对于Android应用程序),并且在Java中很难做到这一点似乎很荒谬。 似乎需要创建一个具有各种回调(startElement,endElement等)的XML处理程序,然后您必须注意将所有这些数据更改为对象。 类似于本教程。 我真正需要的只是将XML文档更改为多维数组,甚至更好的是拥有某种Hpricot处理器。 有没有办法做到这一点,或者我真的必须在上面的示例中编写所有额外的代码吗? 回答1 Java中有两种不同类型的XML处理器(实际上是3种,但很奇怪)。 您拥有的是一个SAX解析器,而您想要的是一个DOM解析器。 看看http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/了解如何使用DOM解析器。 DOM将创建一棵树,您可以轻松导航。 SAX最适合大型文档,但如果速度较慢且占用大量内存,则DOM会更容易。 回答2 尝试http://simple.sourceforge.net,它是一个XML到Java的序列化和绑定框架,它与Android完全兼容,并且非常轻巧,270K,并且没有依赖关系。 回答3 凯尔 (请原谅这篇文章的自我推销性质。我已经在这个库上工作了几个月了,而且都是开放源代码/ Apache 2,所以不是出于自我服务,而是试图提供帮助)。
  • 需要使用来自 SQL 查询的值更新 XML 字符串中的多个节点(Need to update multiple nodes in a XML string using values from an SQL query)
    问题 我有一个 SQL 存储过程局部变量 @DocList (Declare @DocList XML),其中包含以下 XML 数据: <JobList ListItems="7"> <Job JobFriendlyName="EMAIL INVOICES"> <DocumentList> <Document Doc="1" ID="5280301.2019050148902.00020" Date="05-03-2019" Status="NEW" /> <Document Doc="2" ID="5280301.2019050148902.00022" Date="05-03-2019" Status="NEW" /> <Document Doc="3" ID="5280301.2019050148902.00023" Date="05-03-2019" Status="NEW" /> <Document Doc="4" ID="5280301.2019050104301.00055" Date="05-02-2019" Status="NEW" /> <Document Doc="5" ID="5280301.2019050104301.00056" Date="05-02-2019" Status="NEW" /> </DocumentList> </Job> <Job
  • 如何在XSD中使用xsi:type限制XML元素的值?(How to restrict the value of an XML element using xsi:type in XSD?)
    问题 我想根据属性值验证元素的文本值。 例如 <Device xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Parameter xsi:type="xsd:unsignedInt">-100</Parameter> <Parameter xsi:type="xsd:boolean"></Parameter> <Parameter>hello</Parameter> </Device> 以上两种均应失败。 对于布尔值,除“ true”或“ false”(甚至为空字符串)之外,不应接受任何其他内容 我的xml复杂得多,其中包含许多“ Object和“ Parameter节点,而这是我的xsd,它递归地验证了所有这些节点 <xs:complexType name="deviceType"> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element ref="Object"/> <xs:element ref="Parameter"/> </xs:choice> </xs:complexType> <xs:complexType name="objType"> <xs