我看过null以下几种方式表示的元素:
元素存在于xsi:nil="true":
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
Run Code Online (Sandbox Code Playgroud)
该元素存在,但表示为一个空元素(我认为这是错误的,因为'空'并且null在语义上是不同的):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
Run Code Online (Sandbox Code Playgroud)
返回的标记中根本不存在该元素:
<book>
<title>Beowulf</title>
</book>
Run Code Online (Sandbox Code Playgroud)
该元素有一个<null/>子元素(来自下面的TStamper):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Run Code Online (Sandbox Code Playgroud)
是否有正确或规范的方式来表示这样的null价值?还有其他方法吗?
以上示例的XML是人为设计的,所以不要过多地阅读它.:)
我有一个xml,它的节点有i:nil ="true".那是什么意思?
例如:
<FirstName i:nil="true" />
Run Code Online (Sandbox Code Playgroud)
这是否意味着不同于:
<FirstName />
Run Code Online (Sandbox Code Playgroud)
如果是这样,有什么区别?
你知道XML/XSD上的这些标签是否有区别?
<a_element /> and <a_element xsi:nil="true"/>
Run Code Online (Sandbox Code Playgroud)
例如:
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea xsi:nil="true" />
</SpreadCurve>
and
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea />
</SpreadCurve>
Run Code Online (Sandbox Code Playgroud)
这些是等价的吗?
如果我有一个XSD元素:
<xsd:element name="BusinessArea" type="xsd:string"/>
Run Code Online (Sandbox Code Playgroud)
这意味着它默认为xsi:nil ="false".这意味着它不会接受此元素的空值.
我怀疑是,它会接受这个吗?
<BusinessArea />
Run Code Online (Sandbox Code Playgroud)
这对XSD意味着什么?
最好的祝福
我正在尝试从具有null作为其中一个属性的XML中进行选择.而不是返回null,它返回0.我做错了什么?
请参阅下面的代码进行复制:
declare @a xml
select @a = '<TestSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instace">
<Element>
<Property1>1</Property1>
<Property2>1</Property2>
</Element>
<Element>
<Property1 xsi:nil="true" />
<Property2>2</Property2>
</Element>
<Element>
<Property1>3</Property1>
<Property2>3</Property2>
</Element>
</TestSet>'
select ParamValues.TaskChainerTask.query('Property1').value('.','int') as Property1,
ParamValues.TaskChainerTask.query('Property2').value('.','int') as Property2
from @a.nodes('(/TestSet/Element)') as ParamValues(TaskChainerTask)
Run Code Online (Sandbox Code Playgroud)
收益:
Property1 Property2
1 1
0 2
3 3
Run Code Online (Sandbox Code Playgroud)
这返回相同的东西:
declare @a xml
select @a = '<TestSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instace">
<Element>
<Property1>1</Property1>
<Property2>1</Property2>
</Element>
<Element>
<Property1 xsi:nil="true" />
<Property2>2</Property2>
</Element>
<Element>
<Property1>3</Property1>
<Property2>3</Property2>
</Element>
</TestSet>'
select ParamValues.TaskChainerTask.query('Property1').value('.','int') as Property1,
ParamValues.TaskChainerTask.query('Property2').value('.','int') as Property2
from @a.nodes('(/TestSet/Element)') as ParamValues(TaskChainerTask) …Run Code Online (Sandbox Code Playgroud) 我有一个带有注释的java属性@XmlElement(required=false, nillable=true).当对象被编组为xml时,它始终与xsi:nil="true"属性一起输出.
是否有一个jaxbcontext/marshaller选项来指示编组器不要编写元素,而不是用它来编写xsi:nil?
我找了答案,这样也有一个看代码,AFAICS,它总是会写xsi:nil,如果nillable = true.我错过了什么吗?
我的ac #class有20多个字符串属性.我将其中的四分之一设置为实际值.我想序列化类并获得输出
<EmptyAttribute></EmptyAttribute>
Run Code Online (Sandbox Code Playgroud)
对于一个财产
public string EmptyAttribute {get;set;}
Run Code Online (Sandbox Code Playgroud)
我不希望输出
<EmptyAttribute xsi:nil="true"></EmptyAttribute>
Run Code Online (Sandbox Code Playgroud)
我正在使用以下课程
public class XmlTextWriterFull : XmlTextWriter
{
public XmlTextWriterFull(string filename) : base(filename,Encoding.UTF8) { }
public override void WriteEndElement()
{
base.WriteFullEndElement();
base.WriteRaw(Environment.NewLine);
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以得到完整的标签.我只是不知道如何摆脱xsi:nil.
我想反序列化包含可以标记nil="true"为具有类型属性的类的元素的XML消息int?.我能让它工作的唯一方法是编写我自己的NullableInt实现类型IXmlSerializable.有没有更好的方法呢?
我写了完整的问题以及我在博客上解决它的方式.
我在可序列化类中添加了一些可以为null的值类型.我执行序列化使用XmlSerializer但是当值设置为时null,我得到一个空节点xsi:nil="true".这是我在Xsi中找到的正确行为:nil属性绑定支持.
有没有办法关闭此选项,以便在值类型为时输出任何内容null?
我在一个由unmarshaller设置的类中有一个nillable字段:
@XmlElement(name = "value", nillable = true)
private BigDecimal valueVariable;
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法判断xml元素是否已被省略或设置为nil:
<value/>XML文件中缺少A.元素,不是必需的.
=>(valueVariable == null)为true
B. XML文件包含<value xsi:nil="true"/>
=>(valueVariable == null)为true
如果值为xsi:nil或标记丢失,如何判断非String变量?
更新 您可以看到2个好的解决方案,我更喜欢其中一个,但另一个也没关系!
在XML文档中,我有一些地址数据..
<zip>08001</zip>
<zipPlus xsi:nil="true" />
Run Code Online (Sandbox Code Playgroud)
和
<zip>08002</zip>
<zipPlus>4512</zipPlus>
Run Code Online (Sandbox Code Playgroud)
如果有值要使用,只想打扰显示zip plus值.(出于这个例子的目的,我不在乎它是否是正确的zip加号格式)
试图在XSLT中使用以下代码段似乎无法正常工作,我认为这与我如何检查xsl:nil值有关
<EmployerZipCode>
<xsl:value-of select="zip"/>
<xsl:if test="zipPlus != @xsl:nil">
<xsl:value-of select="'-'"/>
<xsl:value-of select="zipPlus"/>
</xsl:if>
<xsl:value-of select="$sepChar"/> <!--this is a comma -->
</EmployerZipCode>
Run Code Online (Sandbox Code Playgroud)
我得到的结果总是如此
08001,
08002,
Run Code Online (Sandbox Code Playgroud)
不
08001,
08002-4512,
Run Code Online (Sandbox Code Playgroud)
在XSLT中检查nil-led元素的正确方法是什么?有没有其他方法来解决这个问题,并获得我想要的结果?