На самом деле, что вы делаете неправильно, вы не включили пространства имен в код извлечения:
var el = (element.Descendants(XNamespace.Get("PersonInstances") +
"PersonId").FirstOrDefault()).Value;
Используйте это, это будет работать.
Но позвольте мне дать вам краткую информацию о пространствах имен:
<Persons xlmns="something">
<Person>
<Name>John</Name>
</Person>
</Person>
В этом примере пространство имен применяется ко всем потомкам, но если вы хотите исключить некоторых потомков
<Persons xlmns="something">
<Person>
<Name>John</Name>
<LastName xmlns="">Usher</LastName>
</Person>
</Person>
Теперь на этот раз LastName будет исключен из этого пространства имен (что-то)
Но если вам трудно, вы можете использовать префиксы, чтобы делать то же самое с меньшими хлопотами:
<pre:Persons xlmns:pre="something">
<pre:Person>
<pre:Name>John</Name>
</Person>
</Person>
Но если вы хотите включить всех потомков в это пространство имен, вы должны использовать префикс во всех потомках, как показано в примере выше
Если вы хотите исключить из него некоторые элементы:
<pre:Persons xlmns:pre="something">
<Person>
<pre:Name>John</Name>
</Person>
</Person>
Затем просто удалите префикс, вот и все.
Вы также можете сделать то же самое для атрибутов:
<pre:Persons xlmns:pre="something">
<pre:Person>
<pre:Name pre:Value="Yahoo">John</pre:Name>
</Person>
</Person>
И если это так, вам нужно указывать пространство имен в вашем коде каждый раз, когда вы хотите получить что-то, имеющее пространство имен.