Java 在文档文件中使用1而不是true是否有效?
我正试图解析一个由谷歌文档生成的docx文件。我正在研究一个名为run的XWPFRun元素。如果调用run.isBold(),它将返回false,即使元素是粗体的。如果我查看run.getCTR(),就会得到下面的xml。正如你所看到的那样Java 在文档文件中使用1而不是true是否有效?,java,apache-poi,Java,Apache Poi,我正试图解析一个由谷歌文档生成的docx文件。我正在研究一个名为run的XWPFRun元素。如果调用run.isBold(),它将返回false,即使元素是粗体的。如果我查看run.getCTR(),就会得到下面的xml。正如你所看到的那样 <w:b w:val="1"/> 而不是 <w:b w:val="true"/> 这会导致isBold()返回false(我猜)。如果我在LibreOffice中导入文件并再次导出,isBold()将返回true,那么
<w:b w:val="1"/>
而不是
<w:b w:val="true"/>
这会导致isBold()返回false(我猜)。如果我在LibreOffice中导入文件并再次导出,isBold()将返回true,那么这是google文档导出或poi中的错误吗?还是我做错了什么
<xml-fragment w:rsidDel="00000000" w:rsidR="00000000" w:rsidRPr="00000000" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture" xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas" xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup">
<w:rPr>
<w:rFonts w:ascii="Verdana" w:cs="Verdana" w:eastAsia="Verdana" w:hAnsi="Verdana"/>
<w:b w:val="1"/>
<w:sz w:val="36"/>
<w:szCs w:val="36"/>
<w:rtl w:val="0"/>
</w:rPr>
<w:t xml:space="preserve">Kapitel 1: Digitale tømmermænd</w:t>
<w:br w:type="textWrapping"/>
</xml-fragment>
卡皮特尔1号:数码时代
从POI ooxml lib/OpenOfficeXML-XMLSchemas.zip中的wml.xsd中,我可以得出结论:1 | true | on是所有可接受且等效的真值,0 | false | off是所有可接受且等效的假值。任何应用程序都应该能够将其选择的这6个值中的任何一个写入XML文件,并且任何应用程序都应该能够以100%的可理解性读取这6个值中的任何一个
您在POI中发现了一个bug。查看isBold(以及使用isctalic和其他任何使用isCTOnOff的代码)的大小写,代码忽略了您发现的“1”/“0”大小写。代码还应使用STOnOff.X_1
这是现在,并将在下一个POI版本(3.15 beta 1)中提供
大胆的
开/关值
开/关值
真的
假的
真的
假的
假的
真的
您可以在各自的模式(POI附带)或标准(ECMA 376/ISO 29500-谷歌是您的朋友)中查找可接受的值
<xsd:element name="b" type="CT_OnOff" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Bold</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:complexType name="CT_OnOff">
<xsd:attribute name="val" type="ST_OnOff">
<xsd:annotation>
<xsd:documentation>On/Off Value</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:simpleType name="ST_OnOff">
<xsd:annotation>
<xsd:documentation>On/Off Value</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="true">
<xsd:annotation>
<xsd:documentation>True</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="false">
<xsd:annotation>
<xsd:documentation>False</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="on">
<xsd:annotation>
<xsd:documentation>True</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="off">
<xsd:annotation>
<xsd:documentation>False</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="0">
<xsd:annotation>
<xsd:documentation>False</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="1">
<xsd:annotation>
<xsd:documentation>True</xsd:documentation>
</xsd:annotation>
</xsd:enumeration>
</xsd:restriction>
</xsd:simpleType>