Repository: pydap/pydap

Issue:
pydap dmr parser skips String variable arrays
<!-- Thank you very much for your input! -->

### Description

I was using the [123bears](http://test.opendap.org:8080/opendap/data/nc/123bears.nc.dmr.html) file for testing, and it turns out that when opening the remote dataset with protocol='dap4' (i.e. making use of the dmr parser) the variable `bears` is not included in the dataset. dap2 works fine, but somehow the dmr parser skips this variable.

### Minimal example that reproduces the bug, or a new desired feature

```python
from pydap.client import open_url
url = 'http://test.opendap.org:8080/opendap/data/nc/123bears.nc'
ds = open_url(url, protocol='dap4')
ds.tree()
```
yields:

```
.123bears.nc
├──i
├──j
├──order
├──shot
├──aloan
├──cross
└──l
```

The variable `bears` is completely missing from the pydap dataset.


Discussion:

Patch:
diff --git a/src/pydap/parsers/dmr.py b/src/pydap/parsers/dmr.py
index 08782dc..1651702 100644
--- a/src/pydap/parsers/dmr.py
+++ b/src/pydap/parsers/dmr.py
@@ -54,6 +54,10 @@ def get_variables(node, prefix="") -> dict:
                 name = prefix + "/" + name
             variables[name] = {"element": subnode, "parent": node.tag}
         variables.update(get_variables(subnode, prefix))
+    strings = node.findall("String")
+    for string in strings:
+        name = string.get("name")
+        variables[name] = {"element": string, "parent": node.tag}
     return variables
 
 


Test patch:
diff --git a/src/pydap/tests/test_parsers_dmr.py b/src/pydap/tests/test_parsers_dmr.py
index 743dabf..9ec3a4d 100644
--- a/src/pydap/tests/test_parsers_dmr.py
+++ b/src/pydap/tests/test_parsers_dmr.py
@@ -265,3 +265,12 @@ class TestAttrsTypesDMRParser(unittest.TestCase):
                                 </Int32>\n</Dataset>"""
         ds = dmr_to_dataset(dmr)
         assert isinstance(ds["x"].attributes["attr"], float)
+
+    def test_string(self):
+        dmr = """<Dataset name="foo">\n    <String name="bears">\n
+                <Attribute name="attr" type="Float32">\n
+                            <Value></Value>\n        </Attribute>\n
+                                </String>\n</Dataset>"""
+        ds = dmr_to_dataset(dmr)
+        assert "bears" in ds.variables()
+        assert ds["bears"].dtype == "S128"