dotnet / dotnet/Open-XML-SDK

Misc element properties are not lining up with their ECMA definitions

Open
#780 14 comments 1 reaction 0 assignees View on GitHub
request: feature
Dominant language
C#
Stars
4.6k
Forks
605
PR merge metrics
No merged PRs in 30d

Description

# Before submitting an issue, please fill this out

Is this a:
- [X] Issue with the OpenXml library
- [ ] Question on library usage

**Description**

The DocumentFormat.OpenXml.WordProcessing.OnOffOnlyValues enum only contains values `On` and `Off` but if I am reading the ECMA-376 standard correctly, properties with this value type may contain values `On`, `Off`, `0`, `1`, `true`, and `false`. When values, such as true or false, are present for an xml attribute for this type, the `Value` property of the `EnumValue` object throws a `System.FormatException` exception.

The attached document contains an element `/document[0]/tbl[0]/tr[0]/trPr[0]/cantSplit` which contains the property in question.
[file-sample_500kB.docx](https://github.com/OfficeDev/Open-XML-SDK/files/4953640/file-sample_500kB.docx)

I'm open to discuss this further but it doesn't seem like this should be the correct behavior.

**Information**

- .NET Target: .NET Framework 4.7.2
- DocumentFormat.OpenXml Version: 2.11.3

**Repro**

```csharp
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.IO;
using System.Linq;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
// Change to path of test file
const string pathToFile = @"C:\path\to\file-sample_500kB.docx";

using (var f = new FileStream(pathToFile, FileMode.Open))
{
using (var docx = WordprocessingDocument.Open(f, false))
{
var sample = docx.MainDocumentPart.Document.Descendants().FirstOrDefault();

if (sample != null)
{
var val = sample.Val;
Console.WriteLine($"Sample has value: {val.HasValue}");
Console.WriteLine($"Sample inner text: {val.InnerText}");

try
{
Console.WriteLine($"Sample value: {val.Value}");
}
catch (Exception x)
{
Console.WriteLine($"Sample value threw {x.GetType().Name}");
Console.WriteLine($"Sample value exception message: {x.Message}");
}
}
}
}
Console.WriteLine("Press any key to quit");
Console.ReadKey(true);
}
}
}

```

**Observed**

```
Sample has value: False
Sample inner text: false
Sample value threw FormatException
Sample value exception message: The text value is not a valid enumeration value.
Press any key to quit
```

**Expected**

```
Sample has value: True
Sample inner text: false
Sample value: DocumentFormat.OpenXml.Wordprocessing.OnOffOnlyValues.False or DocumentFormat.OpenXml.Wordprocessing.OnOffOnlyValues.Off
Press any key to quit
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.